如何解决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:int()以10为底的无效文字:'+' 请帮助
解决方法
问题在这里:
result = numbers[0] + int(symbols[0]) + numbers[1]
如果字符串为1 + 1
,则numbers
为[1,1]
,而symbols
为['+']
。因此symbols[0]
是字符串'+'
,并且int(symbols[0])
给出了错误,因为int('+')
无效。
您似乎想将symbols[0]
表示的运算符作为二进制运算符应用于numbers[0]
和numbers[1]
。直接执行此操作的唯一方法是使用eval
,但由于它被认为是不安全的,因此通常对此不予理。
一个更安全的选择是由操作员索引查找表(dict
),例如:
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])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。