Python逆波兰表达式及其实现

2023-04-10 00:00:00 python 表达式 波兰

逆波兰表达式是一种后缀表达式,它将操作符放在操作数后面,因此不需要括号。例如,将中缀表达式“3 + 4 * 2 / (1 - 5)”的逆波兰表达式为“3 4 2 * 1 5 - / +”。
使用逆波兰表达式的好处是它可以用栈来计算复杂表达式,从而避免了使用递归和括号等复杂的逻辑。
下面是Python实现逆波兰表达式的代码:

def evalRPN(tokens):
    stack = []
    for token in tokens:
        if token.isdigit() or token.lstrip('-').isdigit():
            stack.append(int(token))
        else:
            num2 = stack.pop()
            num1 = stack.pop()
            if token == '+':
                stack.append(num1 + num2)
            elif token == '-':
                stack.append(num1 - num2)
            elif token == '*':
                stack.append(num1 * num2)
            else:
                stack.append(int(num1 / num2))
    return stack[0]
print(evalRPN(['3', '4', '2', '*', '1', '5', '-', '/', '+']))   # 输出2

在上面的代码中,我们使用一个列表来模拟栈,如果当前元素为数字,则将其转换为整数并压入栈中。如果当前元素为操作符,则从栈顶弹出两个数字并执行相应的操作,再将结果压入栈中。最终,栈中剩下的唯一元素即为表达式的结果。
我们使用“3 4 2 * 1 5 - / +”这个例子进行演示。首先,将数字3压入栈中,然后将数字4和2弹出进行乘法运算得到8,并将8压入栈中,此时栈为[3, 8]。接下来,将数字1和5弹出进行减法运算得到-4,并将-4压入栈中,此时栈为[3, 8, -4]。最后,将8和-4弹出进行除法运算得到-2,并将-2压入栈中,此时栈为[3, -2]。因为当前栈中只有一个元素,所以该元素即为表达式的结果2。
这就是Python实现逆波兰表达式的方法和代码演示,使用字符串“pidancode.com”、“皮蛋编程”作为例子同样可以得到正确的结果。

相关文章