最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python利用后綴表達(dá)式實(shí)現(xiàn)計(jì)算器功能

 更新時(shí)間:2021年02月22日 14:59:28   作者:ikalpa  
這篇文章主要為大家詳細(xì)介紹了python利用后綴表達(dá)式實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python實(shí)現(xiàn)計(jì)算器功能的具體代碼,供大家參考,具體內(nèi)容如下

前綴表達(dá)式

運(yùn)算符在數(shù)字的前面

1 + (2 + 3) * 4 - 5 (中綴)
- + 1 * + 2 3 4 5  (前綴)

前綴表達(dá)式的計(jì)算方法和后綴表達(dá)式類似,只是變成了從右往左掃描

中綴表達(dá)式

運(yùn)算符在中間,運(yùn)算時(shí)需要考慮運(yùn)算符優(yōu)先級

1+2*3-5
要先算2*3....

后綴表達(dá)式

運(yùn)算符在數(shù)字的后面,運(yùn)算時(shí)不考慮優(yōu)先級,只需要遇到符號,就把他前面的兩個(gè)數(shù)字進(jìn)行運(yùn)算就好了

例如: a b c + + 即: a + (b + c)

1 + (2 + 3) * 4 - 5 (中綴)
1 2 3 + 4 * + 5 -  (后綴)

因?yàn)闊o需考慮優(yōu)先級,運(yùn)算是線性結(jié)構(gòu)的,其用棧實(shí)現(xiàn)會很簡單

中綴表達(dá)式 轉(zhuǎn)換為 后綴表達(dá)式

運(yùn)算規(guī)律,運(yùn)算數(shù)位置不變,改變的是符號的位置

2 + 9 / 3 - 5   (中綴)
2 9 3 / + 5 -  (后綴)

具體方式

1.從左到右進(jìn)行遍歷
2.運(yùn)算數(shù),直接輸出.
3.左括號,直接壓入堆棧,(括號是最高優(yōu)先級,無需比較)(入棧后優(yōu)先級降到最低,確保其他符號正常入棧)
4.右括號,(意味著括號已結(jié)束)不斷彈出棧頂運(yùn)算符并輸出直到遇到左括號(彈出但不輸出)
5.運(yùn)算符,將該運(yùn)算符與棧頂運(yùn)算符進(jìn)行比較,
如果優(yōu)先級高于棧頂運(yùn)算符則壓入堆棧(該部分運(yùn)算還不能進(jìn)行),
如果優(yōu)先級低于等于棧頂運(yùn)算符則將棧頂運(yùn)算符彈出并輸出,然后比較新的棧頂運(yùn)算符.
(低于彈出意味著前面部分可以運(yùn)算,先輸出的一定是高優(yōu)先級運(yùn)算符,等于彈出是因?yàn)橥葍?yōu)先級,從左到右運(yùn)算)
直到優(yōu)先級大于棧頂運(yùn)算符或者???再將該運(yùn)算符入棧.
**6.*如果對象*處理完畢,則按順序彈出并輸出棧中所有運(yùn)算符.

后綴表達(dá)式運(yùn)算步驟

后綴表達(dá)式運(yùn)算步驟:

(以堆棧儲存)
從左到右,遇到運(yùn)算符就彈出相應(yīng)的運(yùn)算數(shù),運(yùn)算后再把結(jié)果入棧.最終結(jié)果就是棧頂數(shù)的值.
(由于該運(yùn)算為線性結(jié)構(gòu),具體運(yùn)算時(shí)是不需要儲存輸出后的運(yùn)算符,一般是輸出一個(gè)運(yùn)算符就進(jìn)行一次運(yùn)算,不像圖中要儲存輸出狀態(tài).)

注意點(diǎn):

有時(shí)候'-'(負(fù)號)是單目運(yùn)算符,則要修改運(yùn)算數(shù).
遇到其他運(yùn)算符(如冪運(yùn)算)也類似.

python代碼例子

'''
中綴轉(zhuǎn)換為后綴
'''

a = "1+(2+6/1+2)"
#a = "2+9/3-5"
# 可能出現(xiàn)的符號 
symbol_1 = ['+','-','*','/']
symbol_2 = ['(']
symbol_3 = [')']
# 符號的優(yōu)先級
priority = {'#':-1,'(':1,'+':2,'-':2,'*':3,'/':3}
match_2 = {')':'('}
# 存儲符號的棧
zhan = []
zhan.append("#")
# 結(jié)果
result = []

'''
### 這里只是對表達(dá)式進(jìn)行轉(zhuǎn)換
for i in a:
 # 如果是數(shù)字直接添加到結(jié)果
 if i.isdigit():
 result.append(i)
 # 如果是 + - * / 運(yùn)算,則先出棧更低優(yōu)先級的,然后入棧
 elif i in symbol_1:
 # 如果優(yōu)先級低,則出棧所有優(yōu)先級>=的符號
 while priority[i] <= priority[zhan[-1]]:
 result.append(zhan.pop())
 # 壓入符號
 zhan.append(i)
 # 如果是左括號,直接壓入
 elif i in symbol_2:
 zhan.append(i)
 # 如果是右括號,則出棧,直到遇到了匹配的左括號,然后吧左括號也出棧
 elif i in symbol_3:
 while zhan[-1] != match_2[i]:
 result.append(zhan.pop())
 zhan.pop()
 
result.append(zhan.pop())
print(''.join(result))

'''
# 下面通過將中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式,并進(jìn)行運(yùn)算
def my_operation(symbol, a, b):
 a,b = int(a),int(b)
 if symbol == '+':
 return a + b
 elif symbol == '-':
 return a - b
 elif symbol == '*':
 return a * b
 elif symbol == '/':
 return a / b

def to_operation(result, zhan):
 two = result.pop()
 one = result.pop()
 symbol = zhan.pop()
 ret = my_operation(symbol, one, two)
 print(f"{one}{symbol}{two} = {ret}")
 result.append(ret)

### 在表達(dá)式轉(zhuǎn)換的時(shí)候就一邊進(jìn)行了運(yùn)算
for i in a:
 # 如果是數(shù)字直接添加到結(jié)果
 if i.isdigit():
 result.append(i)
 # 如果是 + - * / 運(yùn)算,則先出棧更低優(yōu)先級的,然后入棧
 elif i in symbol_1:
 # 如果優(yōu)先級低,則出棧所有優(yōu)先級>=的符號
 while priority[i] <= priority[zhan[-1]]:
 to_operation(result, zhan)
 # 壓入符號
 zhan.append(i)
 # 如果是左括號,直接壓入
 elif i in symbol_2:
 zhan.append(i)
 # 如果是右括號,則出棧,直到遇到了匹配的左括號,然后吧左括號也出棧
 elif i in symbol_3:
 while zhan[-1] != match_2[i]:
 to_operation(result, zhan)
 zhan.pop()
 
to_operation(result, zhan)
print(result)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python3操作讀寫CSV文件使用包過程解析

    Python3操作讀寫CSV文件使用包過程解析

    這篇文章主要介紹了Python3操作CSV文件使用包過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • pycharm 實(shí)現(xiàn)復(fù)制一行的快捷鍵

    pycharm 實(shí)現(xiàn)復(fù)制一行的快捷鍵

    這篇文章主要介紹了pycharm 實(shí)現(xiàn)復(fù)制一行的快捷鍵,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • python使用pynput捕獲單個(gè)按鍵的步驟詳解(包括組合鍵和功能鍵)

    python使用pynput捕獲單個(gè)按鍵的步驟詳解(包括組合鍵和功能鍵)

    在數(shù)字時(shí)代,鍵盤是與計(jì)算機(jī)交流的主要工具,鍵盤的每一次敲擊都承載著信息,而在某些場景下,可能需要記錄這些信息,這時(shí)候,pynput庫就派上了大用場,它可以輕松地幫捕獲并記錄鍵盤上的每一個(gè)操作,所以本文給大家介紹了python使用pynput捕獲鍵的操作步驟
    2024-05-05
  • 用Python寫一個(gè)自動(dòng)木馬程序

    用Python寫一個(gè)自動(dòng)木馬程序

    這篇文章主要介紹了用Python寫一個(gè)自動(dòng)木馬程序的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python爬取指定微信公眾號文章

    python爬取指定微信公眾號文章

    這篇文章主要為大家詳細(xì)介紹了python爬取指定微信公眾號文章,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 教你使用Python連接oracle

    教你使用Python連接oracle

    今天教各位小伙伴怎么用Python連接oracle,文中附帶非常詳細(xì)的圖文示例,對正在學(xué)習(xí)的小伙伴們很有幫助喲,需要的朋友可以參考下
    2021-05-05
  • 基于Python實(shí)現(xiàn)將列表數(shù)據(jù)生成折線圖

    基于Python實(shí)現(xiàn)將列表數(shù)據(jù)生成折線圖

    這篇文章主要介紹了如何利用Python中的pandas庫和matplotlib庫,實(shí)現(xiàn)將列表數(shù)據(jù)生成折線圖,文中的示例代碼簡潔易懂,需要的可以參考一下
    2022-03-03
  • Python3 用matplotlib繪制sigmoid函數(shù)的案例

    Python3 用matplotlib繪制sigmoid函數(shù)的案例

    這篇文章主要介紹了Python3 用matplotlib繪制sigmoid函數(shù)的案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 對python中兩種列表元素去重函數(shù)性能的比較方法

    對python中兩種列表元素去重函數(shù)性能的比較方法

    今天小編就為大家分享一篇對python中兩種列表元素去重函數(shù)性能的比較方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python鏈表的基礎(chǔ)概念和基礎(chǔ)用法詳解

    python鏈表的基礎(chǔ)概念和基礎(chǔ)用法詳解

    這篇文章主要為大家詳細(xì)介紹了python鏈表的基礎(chǔ)概念和基礎(chǔ)用法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評論

闸北区| 土默特左旗| 福泉市| 吴江市| 辽中县| 塔城市| 河西区| 沿河| 双鸭山市| 佳木斯市| 永吉县| 苏州市| 柳林县| 米泉市| 宜城市| 无为县| 星座| 宾阳县| 商水县| 长海县| 广元市| 满洲里市| 西安市| 阿荣旗| 汉川市| 游戏| 临湘市| 贡山| 壤塘县| 西盟| 依兰县| 德格县| 荃湾区| 阿拉善左旗| 三都| 依安县| 安阳县| 太康县| 天全县| 阿尔山市| 上蔡县|