谁能明白为什么我的分数变量出现 UnBoundLocal 错误

问题描述 投票:0回答:2

谁能明白为什么我的

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)
python-3.x
2个回答
0
投票

您收到

UnboundLocalError: local variable 'Score' referenced before assignment
错误,因为
Quiz
方法没有局部变量
Score
但正在尝试从中读取。您可能打算使用全局变量
Score
,但如果不使用
global
语句,它在方法作用域中不可用。您可以通过在
global Score
方法的开头添加
Quiz
来解决此问题。

但是,在 python 代码中使用全局变量是另一个讨论,我强烈建议避免它们,除非确实有适当的理由使用它们。请参阅此 SO 了解更多详细信息和讨论。


0
投票

当您意识到必须在 Python 中使用变量或循环时,一个好的做法是“初始化变量”。等等,我知道你在说什么; “但这在 Python 中是不可能的”,是的,你是对的。

但是有一个技巧可以解决这个问题。 在开始使用条件块之前,只需定义该变量并将其值设置为“空值”。

如何在 Python 中执行此操作是使用 None 类型: 示例:

Username = None

在尝试在条件中动态创建变量 Username 之前执行此操作

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.