给定一个逆波兰表示法,计算表达式的值。
逆波兰表示:又名后缀表达式,二元运算符置于两个运算对象之后,例如
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))
网友评论