国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實(shí)現(xiàn)處理逆波蘭表達(dá)式示例

2020-02-15 22:18:22
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Python實(shí)現(xiàn)處理逆波蘭表達(dá)式。分享給大家供大家參考,具體如下:

中文名: 逆波蘭表達(dá)式

外文名: Reverse Polish Notation

別名: 后綴表達(dá)式

逆波蘭表達(dá)式又叫做后綴表達(dá)式。在通常的表達(dá)式中,二元運(yùn)算符總是置于與之相關(guān)的兩個(gè)運(yùn)算對象之間,這種表示法也稱為中綴表示。波蘭邏輯學(xué)家J.Lukasiewicz于1929年提出了另一種表示表達(dá)式的方法,按此方法,每一運(yùn)算符都置于其運(yùn)算對象之后,故稱為后綴表示。這個(gè)知識點(diǎn)在數(shù)據(jù)結(jié)構(gòu)和編譯原理這兩門課程中都有介紹。它的優(yōu)勢在于只用兩種簡單操作,入棧和出棧就可以搞定任何普通表達(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一些的寫法:
代碼如下:
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)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 股票| 九龙城区| 高要市| 田阳县| 稻城县| 崇信县| 北票市| 云阳县| 台南县| 云安县| 北辰区| 乌拉特后旗| 华坪县| 咸阳市| 雅安市| 新化县| 南昌市| 博野县| 潞西市| 衡阳县| 黎城县| 岳阳市| 吴旗县| 洛川县| 东海县| 永定县| 铜鼓县| 广东省| 肇庆市| 霍山县| 安义县| 嘉兴市| 齐齐哈尔市| 都兰县| 湖州市| 中山市| 德州市| 博兴县| 德安县| 延吉市| 田东县|