其他分享
首页 > 其他分享> > 循环计算不正确

循环计算不正确

作者:互联网

因此,对于以下以反向波兰表示法(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