<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用雙棧來實現——存放數值的棧 nums
與存放運運算元的棧 ops
.
exp
進行預處理, 將其轉為一個元素對應一個數值或運運算元的列表 explist
.explist
, 每個元素依次壓入對應的棧中. 每次壓入後, 判斷當前兩棧頂是否可進行乘除運算.棧頂可進行乘除運算的充要條件是, ops
棧頂為<*> ,</> 之一, 且 nums
中的元素比 ops
中的元素恰好多一個. 如果可以運算, 則運算, 並將運算結果壓回 nums
中.explist
遍歷完之後, 所有乘除運算都已進行, 此時 ops
中只剩加法與減法, 接下來開始另一個迴圈, 一直運算即可. 最後 nums
中剩餘的唯一元素即為表示式的值.def operation(a, b, op: str): """ 計算一次運算的結果 :param a: val :param b: val :param op: 運運算元 :return: val """ if op == '+': return a+b elif op == '-': return a-b elif op == '*': return a*b elif op == '/': return a/b else: raise Exception('運運算元不正確') def exp_str2list(exp: str): """ 將表示式exp:str轉成list,每個元素對應一個數<num>或運運算元<op>. 已知exp是標準的四則運算表示式字串. :param exp: str,表示式 :return: list """ opset = {'+', '-', '*', '/'} # 運算子集合 flag = -1 explist = list() for i, char in enumerate(exp): # 對錶示式字串中的每個字元 if char in opset: # 若char是運運算元 explist.append(exp[flag+1:i]) # 上一個運運算元到當前運運算元中間為數位,儲存到explist flag = i # 更新flag到當前op位置 explist.append(char) # 當前op亦加入explist explist.append(exp[flag+1:]) return explist def calculate_expression(exp: str): """ 表示式求值. 計算字串exp所代表的表示式的值, 返回一個數值 已知exp是標準的四則運算表示式字串, 且不含括號. :param exp: str, 表示式 :return: val """ opset = {'+', '-', '*', '/'} nums = list() # 數棧 ops = list() # 運運算元棧 explist = exp_str2list(exp) print(explist) for e in explist: # e入棧 if e in opset: # 若e是運運算元 ops.append(e) else: nums.append(eval(e)) # 若e是優先順序高的乘除法, 且 # nums與ops恰好匹配, 棧頂可以進行一次計算, 運算結果壓入回nums if ops and ops[-1] in {'*', '/'} and len(nums) == len(ops) + 1: op = ops.pop() y = nums.pop() x = nums.pop() nums.append(operation(x, y, op)) # 此時explist中元素已全部遍歷, 同時乘除法均已被運算, 雙棧只剩加減法有待運算. 眾所周知, 加減法服從結合律, 接下來一路算到底即可. while ops: op = ops.pop() y = nums.pop() x = nums.pop() x_op_y = operation(x, y, op) nums.append(x_op_y) return nums[0] if __name__ == '__main__': exp = '1*43+542+532*432' print(calculate_expression(exp)) print(eval(exp))
以上就是python四則運算表示式求值範例詳解的詳細內容,更多關於python四則運算表示式求值的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45