我写了一个函数来计算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'
的不受支持的操作数类型。 错误在哪里,如何修复?
您应该将这些值作为字符串传递给eval,请尝试以下操作:
def evaluate(a, b, op):
return eval(str(a) + str(op) + str(b))