On Sun, 23 Nov 2014 17:00:08 +1100, Chris Angelico <ros...@gmail.com> wrote:
>On Sun, Nov 23, 2014 at 3:15 PM, Seymore4Head ><Seymore4Head@hotmail.invalid> wrote: >> Traceback (most recent call last): >> File "C:\Documents and Settings\Administrator\Desktop\rps.py", line >> 7, in <module> >> a=RPS() >> File "C:\Documents and Settings\Administrator\Desktop\rps.py", line >> 6, in __init__ >> self.key=key[self.throw] >> NameError: name 'key' is not defined > >This information is far more helpful than "it is broke". Note how it >says that the name 'key' is not defined? You're expecting that it >would be defined, because you defined it a few lines earlier. So >here's a more useful way to ask the question: > >-- cut -- >I'm trying to use a dictionary to translate throw numbers into >descriptions, but even though the dictionary has been defined, Python >is telling me it hasn't. > >import random >class RPS: > key={0:"rock", 1:"paper",2:"scissors"}; > def __init__(self): > self.throw=random.randrange(3) > self.key=key[self.throw] >a=RPS() > >Traceback (most recent call last): > File "C:\Documents and Settings\Administrator\Desktop\rps.py", line >7, in <module> > a=RPS() > File "C:\Documents and Settings\Administrator\Desktop\rps.py", line >6, in __init__ > self.key=key[self.throw] >NameError: name 'key' is not defined > >It seems to me that 'key' is defined on line 3. Can anyone explain >what's happening here? Thanks! >-- cut -- > >Note that I've posted the *entire* code of your script (it's a >reconstruction, but I suspect it's fairly close; there might be more >code after that, but it's not affecting anything), and included the >traceback in the first message, rather than waiting for someone to ask >for it. > >Armed with this information, someone can tell you: > >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. -- https://mail.python.org/mailman/listinfo/python-list