Как остановить обратный вызов после умышленной ошибки? - PullRequest
0 голосов
/ 02 августа 2020

Я делаю калькулятор, который выполняет только определенное количество операций, если вводится что-то еще, он печатает напоминание. Но во время этого процесса возникает ошибка имени, сразу после того, как он печатает 'a'. где я ошибаюсь?

if Operation == '+':
    c = a + b

elif Operation == '-':
    c = a - b

elif Operation == '*':
    c = a * b

elif Operation == '/':
    c = a / b
else:
    print('Read the Instructions again, dimmwit')


print('Your answer is', c)

print('Thanks! Have a great time!')

И, пожалуйста, дайте несколько советов, как мне улучшить свой код.

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Вы действительно должны также опубликовать конкретное NameError, которое вы получаете, и трассировку. (И ваш полный код.)

В любом случае проблема в том, что вы не инициализируете c ни для чего, поэтому, когда управление выпадает из «оскорбления пользователя» else, вы пытаетесь напечатать c не может произойти.

Присвойте c какое-то значение во всех случаях, затем проверьте, действительно ли вы выполнили операцию:

c = None
if Operation == "+":
    c = a + b
elif Operation == "-":
    c = a - b
elif Operation == "*":
    c = a * b
elif Operation == "/":
    c = a / b
else:
    print("Read the Instructions again, dimmwit")

if c is not None:
    print("Your answer is", c)
    print("Thanks! Have a great time!")

Еще лучше, сделайте вычисление в функции свой собственный, и выводить вещи пользователю в другом месте:

def compute(operation, a, b):
    if operation == "+":
        return a + b
    elif operation == "-":
        return a - b
    elif operation == "*":
        return a * b
    elif operation == "/":
        return a / b
    return None


c = compute(operation, a, b)

if c is not None:
    print("Your answer is", c)
    print("Thanks! Have a great time!")
else:
    print("Please read the instructions again.")
0 голосов
/ 02 августа 2020

Из-за этого:

else:
    print('Read the Instructions again, dimmwit')

Возможно, что к моменту достижения

print('Your answer is', c)

не будет определено c, если будет выбран этот else маршрут .

Если вы сделаете это функцией, например:

def print_result(operation, a, b):
    if operation == '+':
        c = a + b

    elif operation == '-':
        c = a - b

    elif operation == '*':
        c = a * b

    elif operation == '/':
        c = a / b

    else:
        print('Read the Instructions again, dimmwit')
        return

    print('Your answer is', c)
    print('Thanks! Have a great time!')

Тогда вы можете преждевременно остановиться с return, вместо того, чтобы пытаться напечатать ответ c, который никогда не вычислено.

...