01题目
根据逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
输入:[“2”,“1”,“+”,“3”,“*”]
输出:9
解释:((2+1)*3)=9
02源代码
importsys
fromcollectionsimportdeque
defevalRPN(tokens):
st=deque()#定义一个运算数栈
i=0
whileilen(tokens):#遍历postexp
opv=tokens#从逆波兰表达式(后缀表达式)中取一个元素opv
ifopv=="+":#判定为"+"号
a=st.pop()#退栈取数值a
b=st.pop()#退栈取数值b
c=b+a#计算c
st.append(c)#将计算结果进栈
elifopv=="-":#判定为"-"号
a=st.pop()#退栈取数值a
b=st.pop()#退栈取数值b
c=b-a#计算c
st.append(c)#将计算结果进栈
elifopv=="*":#判定为"*"号
a=st.pop()#退栈取数值a
b=st.pop()#退栈取数值b
c=b*a#计算c
elifopv=="/":#判定为"/"号
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的其他元素
returnst[-1]#栈顶元素即为求值结果
if__name__==__main__:
tokens=sys.stdin.readline().strip().split()
print(evalRPN(tokens))
03重要语句提升
①fromcollectionsimportdeque
引入栈这一数据结构;
ps:如果运行过程中有什么问题欢迎评论区咨询小编!