Ошибка значения: недопустимый литерал для int() с основанием 10: ‘ ‘ но в отладчике он имеет значение

#python #if-statement #calculator #valueerror

#python #if-оператор #калькулятор #valueerror

Вопрос:

программа находится внизу

В моей программе я пытаюсь создать рабочий калькулятор, у меня есть циклы, вводящие допустимые операторы, разные операторы, и теперь я пытаюсь разрешить использование предыдущих ответов.

допустим, вы используете , дополнение

num1 = 5

num2 = 5

затем print (num1 num2) … и т. д

теперь ответ равен 10, поэтому я назначаю prevAnswer для ответа, и теперь они оба равны 10

один из моих циклов if выглядит следующим образом:

     if num2 == 0:
    prevAnswer = num1
    num1 = num2
    num2 = prevAnswer
  

Я инициализировал num2 как int и значение 0, поэтому, если пользователь ничего не вводит, оно должно быть 0, верно? затем я делаю num1 = предыдущий ответ и num2 = num1, меняя переменные местами, поэтому, если бы у меня было предыдущее значение 15, у меня не было бы 5-15 = -10, поскольку это не имело бы смысла в калькуляторе.

Я запустил свою программу в отладчике и во время (ошибка значения недопустимый литерал для int () с основанием 10: «) вот где говорится, что ошибка:

 num2 = int(input("Enter number 2: "))
  

в отладчике при этой ошибке это мои переменные, ответ — int 8, num1 — int 2, num2 — int 3, operator — string , prevAnswer — int 8, я пытался перегрузить свой код с помощью int(), чтобы это сработало, и ничего, что я, кажется, пытаюсь изменить, это просто даетя ошибки значений или ошибки имен

пожалуйста, постарайтесь игнорировать беспорядок целых чисел и все, что я знаю, здесь определенно есть вещи, которые мне не нужны, и я научусь использовать функции определения, чтобы сделать все лучше для других и проще для себя. я просто понятия не имею, где я ошибся, я искал все ошибки, которые я получил, и я не могу использовать какие-либо функции или решения, которые они используют, это просто дает мне другие ошибки. наконец, извините за отступ, это не то, как выглядит моя программа, и я предполагаю, что она не будет работать, если вы не сделаете автоматический отступ.

 def isExitCommand(userInput):
return (userInput == 'exit' or userInput == 'stop' or userInput == 'Exit' or userInput == 'EXIT' or 
userInput ==
        'Stop' or userInput == 'STOP')


def calc_exponent(num, pow):
result = 1
for i in range(pow):
    result = result * num
return result


num1 = int(0)
num2 = int(0)
while True:
operator = str(input("Would you like to add( ), subtract(-), multiply(*), divide(/) or use 
exponents(**)? "))

if isExitCommand(operator):
    break

num1 = int(input("Enter number 1: "))
if isExitCommand(num1):
    break
else:
    num1 = int(num1)

num2 = int(input("Enter number 2: "))
if num2 == 0:
    prevAnswer = num1
    num1 = num2
    num2 = prevAnswer

if isExitCommand(num2):
    break

else:
    num2 = int(num2)

    if operator == 'add' or operator == ' ':
        answer = int(num1)   int(num2)
        print(num1, ' ', num2, '=', answer)

    elif operator == 'subtract' or operator == '-':
        answer = int(num1) - int(num2)
        print(num1, '-', num2, '=', answer)

    elif operator == 'multiply' or operator == '*':
        answer = int(num1) * int(num2)
        print(num1, '*', num2, '=', answer)

    elif operator == 'divide' or operator == '/':
        answer = int(num1) / int(num2)
        print(num1, '/', num2, '=', answer)

    elif operator == 'exponents' or operator == '**':
        num1 = int(num1)
        num2 = int(num2)
        answer = calc_exponent(num1, num2)
        print(num1, '**', num2, '=', answer)
    else:
        print('Please type a valid operator...')

prevAnswer = answer

print('Program has exited due to user input.')
  

Ответ №1:

Если пользователь ничего не вводит, строковое значение равно «» (пустое), что приводит к ошибке при преобразовании в int.

Быстрое решение — заменить пустой ввод на 0:

 num1 = int(input("Enter number 1: ") or 0)  # use 0 if empty input
  

Вывод

 Would you like to add( ), subtract(-), multiply(*), divide(/) or use exponents(**)?  
Enter number 1:
Enter number 2: 34
0   34 = 34
  

Комментарии:

1. Привет, спасибо, это помогло мне с моей проблемой 🙂 но быстрый вопрос: почему не было создано экземпляра переменной со значением 0, а затем проверка, по-прежнему ли num2 равно 0, потому что ничего не было введено?

2. Что-то всегда вводится, даже если это пустая строка