On Sun, 23 Nov 2014 10:16:28 -0500, Dave Angel <da...@davea.name> wrote:
>On 11/23/2014 05:52 AM, Seymore4Head wrote: >> On Sun, 23 Nov 2014 17:00:08 +1100, Chris Angelico <ros...@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] -- https://mail.python.org/mailman/listinfo/python-list