#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. Что-то всегда вводится, даже если это пустая строка