生活随笔
收集整理的這篇文章主要介紹了
【Python】洛谷 P1175_表达式的转换(逆波兰式、中缀表达式、后缀表达式、栈)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
題目
代碼
碎碎念:我用來復(fù)習(xí)棧的,刷了巨長時間,一直Runtine Error,編譯直接就沒有過。
好家伙,然后發(fā)現(xiàn)是數(shù)據(jù)給的不夠嚴(yán)謹(jǐn),左右兩端有空格,使用strip()處理一下就好了。
class Stack:def __init__(self
,*args
):self
.items
= [i
for i
in args
]def __str__(self
):return str(self
.items
)def push(self
,item
):self
.items
.append
(item
)def pop(self
):return self
.items
.pop
()def is_empty(self
):return self
.items
== []def peek(self
):return self
.items
[-1]def size(self
):return len(self
.items
)def show(self
):return self
.items
def clear(self
):self
.items
= []
def change_expression(s
: str):dic
= {"(": 0,"^": 3,"*": 2,"/": 2,"+": 1,"-": 1}stack
= Stack
() res
= [] for i
in s
:if i
in ['+', '-', '*', '/', '^']:while (not stack
.is_empty
() and dic
[stack
.peek
()] >= dic
[i
]):res
.append
(stack
.pop
())stack
.push
(i
)elif i
== '(':stack
.push
(i
)elif i
== ')':top_token
= stack
.pop
()while (top_token
!= '('):res
.append
(top_token
)top_token
= stack
.pop
()else:res
.append
(i
)while not stack
.is_empty
():res
.append
(stack
.pop
())return " ".join
(res
)def calc_postfix_expression(s
: str):stack
= Stack
()temp
= list(s
)index
= 0for i
in s
:if i
in "0123456789":stack
.push
(int(i
))else:op2
= stack
.pop
()op1
= stack
.pop
()ans
= do_math
(i
, op1
, op2
)stack
.push
(ans
)before
= temp
[0:index
-2]before
.append
(str(ans
))out
= before
+ temp
[index
+1:]temp
= outindex
= index
- 2print(" ".join
(out
))index
+= 1return stack
.pop
()def do_math(op
, op1
, op2
):if op
== '+':return op1
+op2
elif op
== '-':return op1
-op2
elif op
== '*':return op1
*op2
elif op
== '/':return op1
//op2
elif op
== '^':return op1
**op2
if __name__
== '__main__':expression
= input().strip
()res
= change_expression
(expression
)print(res
) calc_postfix_expression
(res
.replace
(" ", ""))
AC截圖
總結(jié)
以上是生活随笔為你收集整理的【Python】洛谷 P1175_表达式的转换(逆波兰式、中缀表达式、后缀表达式、栈)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。