提问者:小点点

正在计算RPN表达式


我写了一个函数来计算RPN表达式。 首先,我定义了帮助函数evaluate(a,b,op),它接受两个表示两个整数的字符串a和b以及一个运算符op,它是'+'或'*'。

示例:

>>> evaluate('10', '5', '+')
'15'
 >>> evaluate('5', '3', '*')
'15'

然后,我在主函数RPN(s)中使用了该函数,该函数接受包含有效RPN表达式的字符串并返回结果。 整个代码如下所示:

def evaluate(a, b, op):
    return eval(a + op + b)


def rpn(s):
    s = tuple(s.split(' '))
    if len(s) == 3:
        return evaluate(s[0], s[1], s[2])
    else:
        return evaluate(rpn(' '.join(s[:(len(s) - 1) // 2])), rpn(' '.join(s[(len(s) - 1) // 2:-1])), s[-1])

输出应为:

>>> rpn('10 5 + 3 7 * +')
36

但是当我运行这段代码时,我得到TypeError:+:'int‘和'str'的不受支持的操作数类型。 错误在哪里,如何修复?


共1个答案

匿名用户

您应该将这些值作为字符串传递给eval,请尝试以下操作:

def evaluate(a, b, op):
    return eval(str(a) + str(op) + str(b))