因此对于以下计算反波兰表示法 (RPN) 数学表达式的代码,最终的计算(输出)似乎对某些输入不正确。
示例输入:
- [10, 10, "add", 2 "divide"] 等同于 (10+10)/2 并且应该产生 10 的输出
- [3, 1, "multiply", 2 "divide"] 等价于 (3*1)/2 并且应该产生 1.5 的输出
(所有输出都应该是 float )
def evalSimpleEqn(eqn):
result = []
for x in eqn:
if x == "add":
result.append( result.pop() + result.pop() )
elif x == "subtract":
result.append( result.pop() - result.pop())
elif x == "multiply":
result.append( result.pop() * result.pop() )
elif x == "divide":
y = ((result.pop()))
z = (result.pop())
result.append( z/y )
else:
result.append(x)
return (result[-1])
具体来说,当我输入: [12, 8, “减”, 2, “除”, 4, “除”, 1, “加”]
函数返回 0.5 而不是 1.5。我该如何解决?感谢您的任何帮助!
最佳答案
问题出在减法运算中:操作数在您的实现中互换了。您只需要像对待部门一样对待它。对于加法和乘法,顺序无关紧要。
def rpn_eval(s):
result = []
for x in s:
print(result)
if x == "add":
result.append(result.pop() + result.pop())
elif x == "subtract":
y = result.pop()
x = result.pop()
result.append(x - y)
elif x == "multiply":
result.append(result.pop() * result.pop())
elif x == "divide":
y = result.pop()
z = result.pop()
result.append(z / y)
else:
result.append(x)
return result[-1]
调用名称为 taken 的函数 eval
可能不是一个好主意.
关于python - for循环计算不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33280181/