I have no class

Seymore4Head Seymore4Head at Hotmail.invalid
Sun Nov 23 16:54:58 CET 2014


On Sun, 23 Nov 2014 10:16:28 -0500, Dave Angel <davea at davea.name>
wrote:

>On 11/23/2014 05:52 AM, Seymore4Head wrote:
>> On Sun, 23 Nov 2014 17:00:08 +1100, Chris Angelico <rosuav at gmail.com>
>> wrote:
>>
>>>
>>> 1) Python's namespacing rules mean that 'key' is a part of the RPS
>>> class, and can be referred to as 'self.key' or as 'RPS.key'
>>> 2) Use of 'self.key' for the textual form of the throw is shadowing
>>> the first of those reference names (but it's a poor name anyway)
>>> 3) A list would work just as well as a dictionary here, since your
>>> indices are sequential and start from zero
>>> 4) There's another function in the random module which can do both of
>>> your steps at once.
>>>
>>> Thank you for helping us help you help us all!
>>>
>>> ChrisA
>>
>> I wish I could explain my problems so precisely.  I will try to do
>> better in the future.
>> Thanks
>>
>> I will also try this using a list instead of a dictionary.
>>
>
>And please avoid the shadowing.  It's confusing whenever the same name 
>is used for a class attribute and an instance attribute of the same 
>class.  it can be useful for defaults and such, but not here.
>
>  class RPS:
>      KEY_TABLE={0:"rock", 1:"paper",2:"scissors"};
>   or
>      KEY_TABLE= ("rock", "paper", "scissors")
>      def __init__(self):
>          self.throw=random.randrange(3)
>          self.key=RPS.KEY_TABLE[self.throw]
>
>Note I also capitalized the tuple name, which is a convention saying we 
>don't intend to modify it.

I just learned by trial and error if I moved "key" out of the class, I
could still use it in the class without having to give it a RPS
extension.

I also changed it to a list and it works fine.

Thanks

key =["rock", "paper", "scissors"]
class RPS:
    def __init__(self):
        self.throw=random.randrange(3)
        self.key=key[self.throw]



More information about the Python-list mailing list