循环计算不正确
作者:互联网
因此,对于以下以反向波兰表示法(RPN)计算数学表达式的代码,对于某些输入而言,最终的计算(输出)似乎不正确.
输入示例:
> [10,10,“ add”,2“ divide”]等于(10 10)/ 2,并且应该产生10的输出
> [3,1,“乘”,2“除”]等于(3 * 1)/ 2,并且应该产生1.5的输出
(所有输出应为浮点数)
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]
调用函数eval命名为taken可能不是一个好主意.
标签:python-3-4,for-loop,python,operators 来源: https://codeday.me/bug/20191027/1946976.html