如何修复 Python 中的 "undefined name" 错误消息?

How to fix "undefined name" error message in Python?

我正在用 Python 创建一个简单的计算器作为我的第一个 "bigger" 项目。 我正在尝试使用 def 函数,当我尝试调用该函数时,它给出了 "undefined name" 错误消息。

while True:
    print ("Options: ")
    print ("Enter '+' to add two numbers")
    print ("Enter '-' to subtract two numbers")
    print ("Enter '*' to multiply two numbers")
    print ("Enter '/' to divide two numbers")
    print ("Enter 'quit' to end the program")
    user_input = input(": ")

    def calculation (argnum1, argnum2):
        argnum1 = float (input("Enter your fist number: "))
        argnum2 = float (input("Enter your second number: "))
        number = argnum1
        number = argnum2
        result = argnum1 + argnum2
        print (result)
        print("-"*25)
        return number
        return result

    if user_input == "quit":
        break

    elif user_input == "+":
        calculation (argnum1, argnum2)

I expect the output of argnum1 + argnum 2 result.

您可以将函数定义移出 while 块。

def calculation():
    argnum1 = float(input("Enter your fist number: "))
    argnum2 = float(input("Enter your second number: "))
    result = argnum1 + argnum2
    print(result)
    return result

while True:
    print("Options: ")
    print("Enter '+' to add two numbers")
    print("Enter '-' to subtract two numbers")
    print("Enter '*' to multiply two numbers")
    print("Enter '/' to divide two numbers")
    print("Enter 'quit' to end the program")
    user_input = input(": ")

    if user_input == "quit":
        break

    elif user_input == "+":
        calculation()

你不必要地定义了你的函数来接受两个参数,你不能提供它们在内部函数中定义:

    def calculation (argnum1, argnum2):  # argnum1 and argnum2 are immediately discarded
        argnum1 = float (input("Enter your fist number: "))  # argnum1 is defined here
        argnum2 = float (input("Enter your second number: "))
        # do things with argnum1 and argnum2
    ...
    calculation(argnum1, argnum2)  # argnum1 and argnum2 are not defined yet

注意函数体只有在函数被调用时才会执行。当您调用 calculation 时,argnum1argnum2 尚未定义 - 即便如此,它们也只会在另一个范围内定义。

理想情况下,将 input 调用 移到函数的 之外:

    def calculation (argnum1, argnum2):
        # do things with argnum1 and argnum2
    ...
    argnum1 = float (input("Enter your fist number: "))  # argnum1 is defined here
    argnum2 = float (input("Enter your second number: "))
    calculation(argnum1, argnum2)

注意你应该在循环外定义你的函数。否则,它会在每次迭代时不必要地重新定义。一个接一个地有多个 return 语句也是没有意义的。

您的代码应如下所示:

def add(argnum1, argnum2):
    result = argnum1 + argnum2
    print (result)
    print("-"*25)
    return result

while True:
    print ("Options: ")
    print ("Enter '+' to add two numbers")
    print ("Enter '-' to subtract two numbers")
    print ("Enter '*' to multiply two numbers")
    print ("Enter '/' to divide two numbers")
    print ("Enter 'quit' to end the program")
    user_input = input(": ")


    if user_input == "quit":
        break
    elif user_input == "+":
        argnum1 = float (input("Enter your fist number: "))
        argnum2 = float (input("Enter your second number: "))
        add(argnum1, argnum2)