Python實(shí)現(xiàn)處理逆波蘭表達(dá)式示例
本文實(shí)例講述了Python實(shí)現(xiàn)處理逆波蘭表達(dá)式。分享給大家供大家參考,具體如下:
中文名: 逆波蘭表達(dá)式
外文名: Reverse Polish Notation
別名: 后綴表達(dá)式
逆波蘭表達(dá)式又叫做后綴表達(dá)式。在通常的表達(dá)式中,二元運(yùn)算符總是置于與之相關(guān)的兩個(gè)運(yùn)算對(duì)象之間,這種表示法也稱(chēng)為中綴表示。波蘭邏輯學(xué)家J.Lukasiewicz于1929年提出了另一種表示表達(dá)式的方法,按此方法,每一運(yùn)算符都置于其運(yùn)算對(duì)象之后,故稱(chēng)為后綴表示。這個(gè)知識(shí)點(diǎn)在數(shù)據(jù)結(jié)構(gòu)和編譯原理這兩門(mén)課程中都有介紹。它的優(yōu)勢(shì)在于只用兩種簡(jiǎn)單操作,入棧和出棧就可以搞定任何普通表達(dá)式的運(yùn)算。其運(yùn)算方式如下:
如果當(dāng)前字符為變量或者為數(shù)字,則壓棧,如果是運(yùn)算符,則將棧頂兩個(gè)元素彈出作相應(yīng)運(yùn)算,結(jié)果再入棧,最后當(dāng)表達(dá)式掃描完后,棧里的就是結(jié)果。
在Python2中的處理方法:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
RPN_str = '1 2 + 3 4 - *'
stack = []
for c in RPN_str.split():
if c in '+-*':
i2 = stack.pop()
i1 = stack.pop()
print i1,c,i2
print eval('%s'*3 % (i1,c,i2))
stack.append(eval('%s'*3 % (i1,c,i2)))
else:
stack.append(c)
print 'result', stack[0]
運(yùn)算結(jié)果:
1 + 2
3
3 - 4
-1
3 * -1
-3
result -3
當(dāng)然還有更Hacker一些的寫(xiě)法:
RPN_str = '1 2 + 3 4 - *'
print reduce(lambda stack, c: stack+[eval('{2}{1}{0}'.format(stack.pop(),c,stack.pop()))] if c in '+-*' else stack+[c], RPN_str.split(),[])[0]
運(yùn)算結(jié)果:
-3
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- python實(shí)現(xiàn)逆波蘭計(jì)算表達(dá)式實(shí)例詳解
- Python計(jì)算開(kāi)方、立方、圓周率,精確到小數(shù)點(diǎn)后任意位的方法
- Python+pandas計(jì)算數(shù)據(jù)相關(guān)系數(shù)的實(shí)例
- python計(jì)算兩個(gè)數(shù)的百分比方法
- python中計(jì)算一個(gè)列表中連續(xù)相同的元素個(gè)數(shù)方法
- Python基于pyCUDA實(shí)現(xiàn)GPU加速并行計(jì)算功能入門(mén)教程
- 詳解Python中用于計(jì)算指數(shù)的exp()方法
- Python科學(xué)計(jì)算之Pandas詳解
- python 簡(jiǎn)易計(jì)算器程序,代碼就幾行
相關(guān)文章
Flask框架中密碼的加鹽哈希加密和驗(yàn)證功能的用法詳解
加鹽加密就是在加密時(shí)混入一段隨機(jī)字符串,這段字符串便被稱(chēng)為"鹽值",這里我們來(lái)看一下Python的Flask框架中密碼的加鹽哈希加密和驗(yàn)證功能的用法詳解:2016-06-06
python 牛頓法實(shí)現(xiàn)邏輯回歸(Logistic Regression)
這篇文章主要介紹了python 牛頓法實(shí)現(xiàn)邏輯回歸(Logistic Regression),幫助大家更好的進(jìn)行機(jī)器學(xué)習(xí),感興趣的朋友可以了解下2020-10-10
詳解opencv中畫(huà)圓circle函數(shù)和橢圓ellipse函數(shù)
這篇文章主要介紹了opencv中畫(huà)圓circle函數(shù)和橢圓ellipse函數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
Python編程itertools模塊處理可迭代集合相關(guān)函數(shù)
本篇博客將為你介紹Python函數(shù)式編程itertools模塊中處理可迭代集合的相關(guān)函數(shù),有需要的朋友可以借鑒參考下,希望可以有所幫助2021-09-09
Python-Tkinter Text輸入內(nèi)容在界面顯示的實(shí)例
今天小編就為大家分享一篇Python-Tkinter Text輸入內(nèi)容在界面顯示的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
如何通過(guò)Python的pyttsx3庫(kù)將文字轉(zhuǎn)為音頻
pyttsx3是一個(gè)開(kāi)源的Python文本轉(zhuǎn)語(yǔ)音庫(kù),可以將文本轉(zhuǎn)換為自然的人類(lèi)語(yǔ)音,這篇文章主要介紹了如何通過(guò)Python的pyttsx3庫(kù)將文字轉(zhuǎn)為音頻,需要的朋友可以參考下2023-04-04
對(duì)django views中 request, response的常用操作詳解
今天小編就為大家分享一篇對(duì)django views中 request, response的常用操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07

