On Sun, 23 Nov 2014 11:14:34 -0500, Dave Angel <da...@davea.name> wrote:
>On 11/23/2014 10:54 AM, Seymore4Head wrote: >> 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. > >It's not an extension, it's a namespace qualifier. That's a good thing, >to constrain a particular name to as narrow a scope as possible. In >other words, instead of making it a global variable, put it in the >namespace that gives it meaning. > >> >> 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] >> > >But it belongs in the class, doesn't it? If other code wants to use it, >it'd be better if all references were of the form RPS.KEY_TABLE. And >it should be a tuple, not a list, as you're not planning to change it. Like I have said, most of the stuff I am doing is still trial and error. Having to specify RPS to use it inside the class seemed wrong to me. I haven't read enough about classes yet to know what the correct way is yet. I will leave it in. Thanks -- https://mail.python.org/mailman/listinfo/python-list