谁能明白为什么我的
score
变量出现“UnBoundLocal Error”?
import random
Score=0
def Main_Menu(Score):
print("=============================")
print("WELCOME TO MY QUIZ")
print("=============================")
while True:
Username=input("What is your name?")
if Username.isalpha():
if len(Username)>11:
print("You are only a maximum of 11 characters")
else:
Username=Username.title()
break
else:
print("Letters only")
while True:
while True:
Option=input("What do you want to do?\n1 For Quiz\n2 To Quit.")
if Option.isdigit():
Option=int(Option)
break
else:
print("Numbers Only.")
if Option==1:
for x in range(10):
Quiz(Username)
print("You have scored",Score,"point out of 10!!\n")
elif Option==2:
input("Press Enter to quit the program")
break
else:
print("You only have 2 options")
Quiz(Username)
def Quiz(Username):
Tries=3
Number_One=random.randint (0,10)
Number_Two=random.randint (0,10)
Arithmetic_Operator=random.choice(["+","-","*",])
if Arithmetic_Operator=="+":
print(Username,"\nWhat is",Number_Two,"+",Number_One,"?")
Answer=Number_Two+Number_One
elif Arithmetic_Operator=="-":
print(Username,"\nWhat is",Number_Two,"-",Number_One,"?")
Answer=Number_Two-Number_One
elif Arithmetic_Operator=="*":
print(Username,"\nWhat is",Number_Two,"*",Number_One,"?")
Answer=Number_Two*Number_One
while Tries!=0:
while True:
Guess=input("Answer: ")
if Guess.isdigit():
Guess=int(Guess)
break
else:
print("Numbers Only.")
if Guess==Answer:
print("Well Done.You got it right.\nYou have a point")
Score=Score+1
break
elif Guess!=Answer:
Tries=Tries-1
print("You have",Tries,"tries left")
if Tries==0:
print("The answer is",Answer)
Main_Menu(Score)
您收到
UnboundLocalError: local variable 'Score' referenced before assignment
错误,因为 Quiz
方法没有局部变量 Score
但正在尝试从中读取。您可能打算使用全局变量 Score
,但如果不使用 global
语句,它在方法作用域中不可用。您可以通过在 global Score
方法的开头添加 Quiz
来解决此问题。
但是,在 python 代码中使用全局变量是另一个讨论,我强烈建议避免它们,除非确实有适当的理由使用它们。请参阅此 SO 了解更多详细信息和讨论。
当您意识到必须在 Python 中使用变量或循环时,一个好的做法是“初始化变量”。等等,我知道你在说什么; “但这在 Python 中是不可能的”,是的,你是对的。
但是有一个技巧可以解决这个问题。 在开始使用条件块之前,只需定义该变量并将其值设置为“空值”。
如何在 Python 中执行此操作是使用 None 类型: 示例:
Username = None
在尝试在条件中动态创建变量 Username 之前执行此操作
希望有帮助。