Не работает код. ValueError: invalid literal for int() with base 10: (Python)
Даже погуглив я не смог найти решение проблемы. Данный код является калькулятором. Но почему-то работает только сложение... Вот ошибка: ValueError: invalid literal for int() with base 10:
Код:
inp = list(input())
i = 0
while i != len(inp):
if inp[i].isalpha():
print('Enter only numbers')
break
if inp[i] == '+' and inp.index(inp[i]) == i and not inp.count(inp[i]) > 1:
print(int(''.join(inp[:i:])) + int(''.join(inp[i::])))
break
if inp[i] == '*' and inp.index(inp[i]) == i and not inp.count(inp[i]) > 1:
print(int(''.join(inp[:i:])) , int(''.join(inp[i::])))
break
if inp[i] == '-' and inp.index(inp[i]) == i and not inp.count(inp[i]) > 1:
print(int(''.join(inp[:i:])) - int(''.join(inp[i::])))
break
if inp[i] == '/' and inp.index(inp[i]) == i and not inp.count(inp[i]) > 1:
print(int(''.join(inp[:i:])) / int(''.join(inp[i::])))
break
i += 1
Ответы (1 шт):
-
можно было бы проверить сразу всю введённую строку, а не посимвольноif inp[i].isalpha(): print('Enter only numbers') break
-
inp = list(input())можно было бы ввести текст, а по строку двигаться через
forfor letter in inp:или
for index in range(len(inp))это тоже удобнее
у вас проблемы возникают из-за присутствия пробелов - их можно предварительно удалить из строки, хотя бы
inp = list(filter(lambda i: i != ' ', input()))ну или если работать со строкой:
inp = input().replace(' ', '')вместо умножить вы поставили запятую
print(int(''.join(inp[:i:])) , int(''.join(inp[i::])))везде ля второго параметра вы используете
inp[i::], куда входит и знак, а надо на 1 символ дальше, т.е.inp[i+1::]
Таким образом исправленный код может выглядеть так:
inp = list(filter(lambda i: i != ' ', input()))
i = 0
while i != len(inp):
if inp[i].isalpha():
print('Enter only numbers')
break
if inp[i] == '+' and inp.index(inp[i]) == i and not inp.count(inp[i]) > 1:
print(int(''.join(inp[:i])) + int(''.join(inp[i + 1])))
break
if inp[i] == '*' and inp.index(inp[i]) == i and not inp.count(inp[i]) > 1:
print(int(''.join(inp[:i])) * int(''.join(inp[i + 1])))
break
if inp[i] == '-' and inp.index(inp[i]) == i and not inp.count(inp[i]) > 1:
print(int(''.join(inp[:i])) - int(''.join(inp[i + 1])))
break
if inp[i] == '/' and inp.index(inp[i]) == i and not inp.count(inp[i]) > 1:
print(int(''.join(inp[:i])) / int(''.join(inp[i + 1])))
break
i += 1
Но если переписать чуть-чуть, то можно сделать код чуть более понятным:
inp = input().replace(' ', '')
for i in range(len(inp)):
if inp[i].isalpha():
print('Enter only numbers')
break
if 0 < i < len(inp) - 1:
left = int(inp[:i])
right = int(inp[i + 1:])
res = None
if inp[i] == '+':
res = left + right
if inp[i] == '-':
res = left - right
if inp[i] == '*':
res = left * right
if inp[i] == '/':
res = left / right
if res is not None:
print(res)
break