日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python】洛谷 P1175_表达式的转换(逆波兰式、中缀表达式、后缀表达式、栈)

發(fā)布時間:2025/1/21 python 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】洛谷 P1175_表达式的转换(逆波兰式、中缀表达式、后缀表达式、栈) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

    • 題目
    • 代碼
    • AC截圖

題目

代碼

碎碎念:我用來復(fù)習(xí)棧的,刷了巨長時間,一直Runtine Error,編譯直接就沒有過。
好家伙,然后發(fā)現(xiàn)是數(shù)據(jù)給的不夠嚴謹,左右兩端有空格,使用strip()處理一下就好了。

# 棧結(jié)構(gòu) 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.itemsdef clear(self):self.items = []# 中綴表達式 => 后綴表達式 # LG P1175 表達式的轉(zhuǎn)換def change_expression(s: str):dic = {"(": 0,"^": 3,"*": 2,"/": 2,"+": 1,"-": 1}stack = Stack() # 存儲符號res = [] # 放答案for i in s:# 操作符if i in ['+', '-', '*', '/', '^']:# 要先取出優(yōu)先級更高的,或者相等的運算符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:# 運算數(shù)res.append(i)# 剩余元素全部加入while not stack.is_empty():res.append(stack.pop())return " ".join(res)def calc_postfix_expression(s: str):# 計算后綴表達式stack = Stack()# start 方便輸出temp = list(s)index = 0# end 方便輸出for i in s:if i in "0123456789":# 運算數(shù)stack.push(int(i))else:# 運算符op2 = stack.pop()op1 = stack.pop()ans = do_math(i, op1, op2)stack.push(ans)# start 輸出依次結(jié)果before = temp[0:index-2]before.append(str(ans))out = before + temp[index+1:]temp = outindex = index - 2print(" ".join(out))# end 輸出結(jié)果index += 1return stack.pop()def do_math(op, op1, op2):if op == '+':return op1+op2elif op == '-':return op1-op2elif op == '*':return op1*op2elif op == '/':return op1//op2elif op == '^':return op1**op2if __name__ == '__main__':# 對于題目中的輸入字符串一定要小心(如果比賽題目不嚴謹,會導(dǎo)致很多問題,最后strip()一下)expression = input().strip()res = change_expression(expression)# res = change_expression("(1+2)*3-4")print(res) # 輸出結(jié)果calc_postfix_expression(res.replace(" ", ""))# print(ans)

AC截圖

總結(jié)

以上是生活随笔為你收集整理的【Python】洛谷 P1175_表达式的转换(逆波兰式、中缀表达式、后缀表达式、栈)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。