首页 > 解决方案 > 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: '+'
帮助请

标签: pythonstringnumberscalculatorsymbols

解决方案


问题在这里:

result = numbers[0] + int(symbols[0]) + numbers[1]

如果字符串是1 + 1,那么numbersis[1, 1]symbolsis ['+']symbols[0]string 也是如此'+',并且由于无效而int(symbols[0])给出错误。int('+')

看起来您想将 to 表示的运算符应用symbols[0]numbers[0]二元numbers[1]运算符。直接执行此操作的唯一方法是使用eval,但这通常不受欢迎,因为它被认为是不安全的。

一个更安全的选择是有一个dict由操作员索引的查找表(a),例如:

op_lookup = {'+' : do_add,
             '-' : do_sub}

其中do_adddo_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])

推荐阅读