我有一点麻烦理解为什么有些变量是局部的,有些是全球性的。例如。当我试试这个:为什么一些Python变量停留全球性的,而有些需要定义全球
from random import randint
score = 0
choice_index_map = {"a": 0, "b": 1, "c": 2, "d": 3}
questions = [
"What is the answer for this sample question?",
"Answers where 1 is a, 2 is b, etc.",
"Another sample question; answer is d."
]
choices = [
["a) choice 1", "b) choice 2", "c) choice 3", "d) choice 4"],
["a) choice 1", "b) choice 2", "c) choice 3", "d) choice 4"],
["a) choice 1", "b) choice 2", "c) choice 3", "d) choice 4"]
]
answers = [
"a",
"b",
"d"
]
assert len(questions) == len(choices), "You haven't properly set up your question-choices."
assert len(questions) == len(answers), "You haven't properly set up your question-answers."
def askQ():
# global score
# while score < 3:
question = randint(0, len(questions) - 1)
print questions[question]
for i in xrange(0, 4):
print choices[question][i]
response = raw_input("> ")
if response == answers[question]:
score += 1
print "That's correct, the answer is %s." % choices[question][choice_index_map[response]]
# e.g. choices[1][2]
else:
score -= 1
print "No, I'm sorry -- the answer is %s." % choices[question][choice_index_map[answers[question]]]
print score
askQ()
我得到这个错误:
Macintosh-346:gameAttempt Prasanna$ python qex.py
Answers where 1 is a, 2 is b, etc.
a) choice 1
b) choice 2
c) choice 3
d) choice 4
> b
Traceback (most recent call last):
File "qex.py", line 47, in <module>
askQ()
File "qex.py", line 39, in askQ
score += 1
UnboundLocalError: local variable 'score' referenced before assignment
现在,它完全是有道理的我,为什么它抛出我一个错误的分数。我没有在全球范围内设置它(我有意将这部分内容表明出来)。而且我特别不使用while子句来让它继续前进(否则它甚至不会输入该子句)。令我困惑的是为什么它不会给我提出同样的问题,选择和答案。 当我取消注释这两行时,脚本完美无缺 - 即使没有我将问题,答案和选项定义为全局变量。这是为什么?这是我无法从搜索其他问题中发现的一件事 - 在这里,Python似乎并不一致。它是否与我使用列表作为其他变量?这是为什么?
(另外,第一次海报,非常感谢所有我发现虽然有帮助,不需要发问。)
分配的方法*总是*创建一个[新]本地绑定,除非该变量是'global''ed:转让不会使变量“非全局”,而是与阴影一个新的绑定全局变量。 – 2012-11-13 03:10:32