Как исправить сообщение об ошибке «неопределенное имя» в Python? - PullRequest
0 голосов
/ 04 мая 2019

Я создаю простой калькулятор с Python в качестве моего первого "большего" проекта.Я пытаюсь использовать функцию def, и когда я пытаюсь вызвать эту функцию, выдается сообщение об ошибке «неопределенное имя».

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.

Ответы [ 2 ]

1 голос
/ 04 мая 2019

Вы излишне определили, что ваша функция принимает два параметра, которые вы не можете предоставить, поскольку они определены внутри функции:

    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, argnum1 и argnum2, не определены - и даже тогда они определяются только в другой области.

В идеале переместите 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)
0 голосов
/ 04 мая 2019

Вы можете переместить определение функции из блока 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()
...