python - ValueError:int() 的无效文字,以 10 为底:计算器中的“+”
问题描述
我认为 ' +
' 是一个整数,看起来它是一个字符串。
我正在制作一个计算器,
这是我的代码:
while True:
said = input("? \n")
symbols = []
for symbol in said.split():
if symbol in ['+','-','*','/']:
symbols.append(symbol)
allobj = said.split()
numbers = []
for number in said.split():
if number.isdigit():
numbers.append(int(number))
length = len(numbers)
if '+' in allobj and length == 2:
result = numbers[0] + int(symbols[0]) + numbers[1]
print("Result ---- " + str(result))
如果我打印1 + 1
它会给我ValueError: invalid literal for int() with base 10: '+'
帮助请
解决方案
问题在这里:
result = numbers[0] + int(symbols[0]) + numbers[1]
如果字符串是1 + 1
,那么numbers
is[1, 1]
和symbols
is ['+']
。symbols[0]
string 也是如此'+'
,并且由于无效而int(symbols[0])
给出错误。int('+')
看起来您想将 to 表示的运算符应用symbols[0]
为numbers[0]
二元numbers[1]
运算符。直接执行此操作的唯一方法是使用eval
,但这通常不受欢迎,因为它被认为是不安全的。
一个更安全的选择是有一个dict
由操作员索引的查找表(a),例如:
op_lookup = {'+' : do_add,
'-' : do_sub}
其中do_add
和do_sub
是执行加法和减法的双操作数函数,例如
def do_add(x, y):
return x + y
def do_sub(x, y):
return x - y
然后你可以这样做:
result = op_lookup(symbols[0])(numbers[0], numbers[1])