逆波兰表示法 Python

给定一个逆波兰表示法,计算表达式的值。

逆波兰表示:又名后缀表达式,二元运算符置于两个运算对象之后,例如 2 + 1 写作 2 1 +,3 * 4 写作 3 4 *(2 + 1) * 3写作 2 1 + 3 *

解题思路:利用栈的思想。两个数在栈顶,紧跟着运算符,只需将栈顶的两个数弹出,然后运算即可。

def calucate(s):
    stack = []
    opers = ['+', '-', '*', '/']
    for c in s:
        if c not in opers:
            stack.append(int(char))
        else:
            top1 = stack.pop()
            top2 = stack.pop()
            if c == '+':
                stack.append(top2 + top1)
            elif c == '-':
                stack.append(top2 - top1)
            elif c == '*':
                stack.append(top2 * top1)
            elif c == '/':
                stack.append(int(top2 / top1))
    return stack.pop()

if __name__ == '__main__':
    # s = input().split()
    s = '2 1 + 3 *'
    print(calucate(s))

你可能感兴趣的:(逆波兰表示法 Python)