方法一:用列表
def evalRPN(tokens):
list = []
for i in tokens:
try:
list.append(int(i)) # 如果是整形就加入list中
except:
# 不是就出栈第一个数
num1 = list.pop()
# 不是就出栈第一个数
num2 = list.pop()
list.append(values(num2, num1, i))
return list[0]
def values(num2, num1, symbol):
if symbol == "+":
return num2 + num1
if symbol == "-":
return num2 - num1
if symbol == "*":
return num2 * num1
if symbol == "/":
return int(num2/ num1)
print(evalRPN(input().split(' ')))
方法二:用双向队列
import sys
from collections import deque
def evalRPN(tokens):
st = deque() # 定义一个运算数栈
i = 0
while i < len(tokens): # 遍历postexp
opv = tokens[i] # 从逆波兰表达式(后缀表达式)中取一个元素opv
if opv == "+": # 判定为"+"号
a = st.pop() # 退栈取数值a
b = st.pop() # 退栈取数值b
c = b+a # 计算c
st.append(c) # 将计算结果进栈
elif opv == "-": # 判定为"-"号
a = st.pop() # 退栈取数值a
b = st.pop() # 退栈取数值b
c = b-a # 计算c
st.append(c) # 将计算结果进栈
elif opv == "*": # 判定为"*"号
a = st.pop() # 退栈取数值a
b = st.pop() # 退栈取数值b
c = b*a # 计算c
st.append(c) # 将计算结果进栈
elif opv == "/": # 判定为"/"号
a = st.pop() # 退栈取数值a
b = st.pop() # 退栈取数值b
c = int(b/a) # 计算c
st.append(c) # 将计算结果进栈
else: # 处理整数
st.append(int(opv)) # 将数值opv进栈
i += 1 # 继续处理postexp的其他元素
return st[-1] # 栈顶元素即为求值结果
if __name__ == '__main__':
tokens = sys.stdin.readline().strip().split(' ')
print(evalRPN(tokens))