python - for循环计算不正确

标签 python for-loop operators python-3.4

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

相关文章:

python - 导入错误: cannot import name 'key' from 'pynput.keyboard'

Javascript 循环对象数组并返回第一个值

python - Python 中的指数语法

python - matplotlib 和 unicode 字符

python - 如何将 Q-learning 应用于每个时间步执行多个操作的 OpenAI-gym 环境?

python - bash/cygwin/$路径 : Do I really have to reboot to alter $PATH?

javascript for 循环函数合并两个新数组。

c - 如何在不使用 for 循环的情况下填充二维数组?

javascript - JSLint 不期望我的波浪号

list - 你如何在 prolog 中定义一个运算符来制作一个列表?