Python: "Name is not defined" 错误

Python: "Name is not defined" error

所以前几天我正在做家庭作业的补习课程作业。这是我的程序。我希望它是不言自明的。 (顺便说一句,这是 Python。)

def print_intro():
print ("Welcome to the tuition program. This program will calculate your tuition cost.")

def get_id_num():
    grad_status = input("Is the student an undergrad or grad (U/G)? ")
    id_num = int(input("Enter the student's ID Number: "))
    while (grad_status == "U") and (id_num < 0):
        print("Sorry, that is invalid. Please try again.")
        id_num = int(input("Enter the student's ID Number: "))  
    while (grad_status == "G") and (id_num >= 0):
        print("Sorry, that is invalid. Please try again.")
        id_num = int(input("Enter the student's ID Number: "))

def get_info():
    get_id_num()
    age = int(input("Enter the student's age (numbers only): "))
    residency = input("Is the student in-state or out-of-state (I/O)? ")
    num_credits = int(input("How many hours of credit will the student take? "))
    correct = input("Is all the above information correct (Y/N)? ")
    while correct == "N":
        print("Please enter the information correctly!")
        get_info()
    else:
        get_base_tuition()

def get_base_tuition():
    if (grad_status == "U") and (num_credits <= 6) and (residency == "I"):
        initial_tuition = 2000
    if (grad_status == "U") and (7 <= num_credits <= 11) and (residency == "I"):
        initial_tuition = 3000
    if (grad_status == "U") and (num_credits >= 12) and (residency == "I"):
        initial_tuition = 3800
    if (grad_status == "U") and (num_credits <= 6) and (residency == "O"):
        initial_tuition = 2000
    if (grad_status == "U") and (7 <= num_credits <= 11) and (residency == "O"):
        initial_tuition = 3000
    if (grad_status == "U") and (num_credits >= 12) and (residency == "O"):
        initial_tuition = 9000
    if (grad_status == "G") and (num_credits <= 6) and (residency == "I"):
        initial_tuition = 2000
    if (grad_status == "G") and (7 <= num_credits <= 11) and (residency == "I"):
        initial_tuition = 2500
    if (grad_status == "G") and (num_credits >= 12) and (residency == "I"):
        initial_tuition = 4400
    if (grad_status == "G") and (num_credits <= 6) and (residency == "O"):
        initial_tuition = 2000
    if (grad_status == "G") and (7 <= num_credits <= 11) and (residency == "O"):
        initial_tuition = 3700
    if (grad_status == "G") and (num_credits >= 12) and (residency == "O"):
        initial_tuition = 4400
    print(initial_tuition)

所以在我 运行 这个之后,get_info() 函数 运行 没问题,直到它进入 get_base_tuition() 函数。我收到此错误:

line 28, in get_base_tuition
    if (grad_status == "U") and (num_credits <= 6) and (residency == "I"):
NameError: name 'grad_status' is not defined

我应该在我的函数中添加参数吗?我被困住了,真的不知道该怎么办。我知道如果我在 get_base_tuition() 中包含变量 "grad_status"、"num_credits" 和 "residency" 或在 Python [=37= 中定义变量]在运行ning get_base_tuition()之前,那当然可以了。但是,如果我像现在这样将它放在另一个 get_base_tuition() 中,它将无法工作。有什么方法可以使 get_base_tuition() 函数 运行 而不必将变量放在 get_base_tuition() 中?因为我已经将这些变量放在函数 get_id_num() 和 get_info() 中。 感谢帮助,谢谢。

如果您想了解基本学费的计算方式,我将作业附在此处: Assignment Page 2

您需要阅读并理解 Python 中范围的概念。这是获得 basics on scope

的好答案

具体来说,在您的代码中,grad_status 变量是在 get_id_num 函数中定义的。一旦程序退出该函数,该范围内定义的所有变量都将被删除,并且不会存在于其他函数的范围内。如果您有多个函数需要的变量,则需要在全局范围内定义该变量或将其作为参数传递给需要它的每个函数。