Python 正則表達(dá)式實(shí)現(xiàn)計(jì)算器功能
需求:
用戶輸入運(yùn)算表達(dá)式,終端顯示計(jì)算結(jié)果
代碼:
# !/usr/bin/env/ python3 # -*- coding: utf-8 -*- """用戶輸入計(jì)算表達(dá)式,顯示計(jì)算結(jié)果""" __author__ = 'Jack' import re bracket = re.compile(r'\([^()]+\)') # 尋找最內(nèi)層括號(hào)規(guī)則 mul = re.compile(r'(\d+\.?\d*\*-\d+\.?\d*)|(\d+\.?\d*\*\d+\.?\d*)') # 尋找乘法運(yùn)算規(guī)則 div = re.compile(r'(\d+\.?\d*/-\d+\.?\d*)|(\d+\.?\d*/\d+\.?\d*)') # 尋找除法運(yùn)算規(guī)則 add = re.compile(r'(-?\d+\.?\d*\+-\d+\.?\d*)|(-?\d+\.?\d*\+\d+\.?\d*)') # 尋找加法運(yùn)算規(guī)則 sub = re.compile(r'(\d+\.?\d*--\d+\.?\d*)|(\d+\.?\d*-\d+\.?\d*)') # 尋找減法運(yùn)算規(guī)則 c_f = re.compile(r'\(?\+?-?\d+\)?') # 檢查括號(hào)內(nèi)是否運(yùn)算完畢規(guī)則 strip = re.compile(r'[^(].*[^)]') # 脫括號(hào)規(guī)則 def Mul(s): """計(jì)算表達(dá)式中的乘法運(yùn)算""" exp = re.split(r'\*', mul.search(s).group()) return s.replace(mul.search(s).group(), str(float(exp[0]) * float(exp[1]))) def Div(s): """計(jì)算表達(dá)式中的除法運(yùn)算""" exp = re.split(r'/', div.search(s).group()) return s.replace(div.search(s).group(), str(float(exp[0]) / float(exp[1]))) def Add(s): """計(jì)算表達(dá)式中的加法運(yùn)算""" exp = re.split(r'\+', add.search(s).group()) return s.replace(add.search(s).group(), str(float(exp[0]) + float(exp[1]))) def Sub(s): """計(jì)算表達(dá)式中的減法運(yùn)算""" exp = re.split(r'-', sub.search(s).group()) return s.replace(sub.search(s).group(), str(float(exp[0]) - float(exp[1]))) def calc(): while True: s = input('Please input the expression(q for quit):') # 例:'1+2- (3* 4-3/2+ ( 3-2*(3+ 5 -3* -0.2-3.3*2.2 -8.5/ 2.4 )+10) +10)' if s == 'q': break else: s = ''.join([x for x in re.split('\s+', s)]) # 將表達(dá)式按空格分割并重組 if not s.startswith('('): # 若用戶輸入的表達(dá)式首尾無(wú)括號(hào),則統(tǒng)一格式化為:(表達(dá)式) s = str('(%s)' % s) while bracket.search(s): # 若表達(dá)式s存在括號(hào) s = s.replace('--', '+') # 檢查表達(dá)式,并將--運(yùn)算替換為+運(yùn)算 s_search = bracket.search(s).group() # 將最內(nèi)層括號(hào)及其內(nèi)容賦給變量s_search if div.search(s_search): # 若除法運(yùn)算存在(必須放在乘法之前) s = s.replace(s_search, Div(s_search)) # 執(zhí)行除法運(yùn)算并將結(jié)果替換原表達(dá)式 elif mul.search(s_search): # 若乘法運(yùn)算存在 s = s.replace(s_search, Mul(s_search)) # 執(zhí)行乘法運(yùn)算并將結(jié)果替換原表達(dá)式 elif sub.search(s_search): # 若減法運(yùn)算存在(必須放在加法之前) s = s.replace(s_search, Sub(s_search)) # 執(zhí)行減法運(yùn)算并將結(jié)果替換原表達(dá)式 elif add.search(s_search): # 若加法運(yùn)算存在 s = s.replace(s_search, Add(s_search)) # 執(zhí)行加法運(yùn)算并將結(jié)果替換原表達(dá)式 elif c_f.search(s_search): # 若括號(hào)內(nèi)無(wú)任何運(yùn)算(類似(-2.32)除外) s = s.replace(s_search, strip.search(s_search).group()) # 將括號(hào)脫掉,例:(-2.32)---> -2.32 print('The answer is: %.2f' % (float(s))) if __name__ == '__main__': calc()
運(yùn)行效果:
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
Python批量刪除或移動(dòng)指定圖像的實(shí)現(xiàn)示例
本文主要介紹了Python批量刪除或移動(dòng)指定圖像,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Pytest?fixture及conftest相關(guān)詳解
這篇文章主要介紹了Pytest?fixture及conftest相關(guān)詳解,fixture是在測(cè)試函數(shù)運(yùn)行前后,由pytest執(zhí)行的外殼函數(shù),更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-09-09Python 處理數(shù)據(jù)的實(shí)例詳解
這篇文章主要介紹了Python 處理數(shù)據(jù)的實(shí)例詳解的相關(guān)資料,這里主要介紹Python 常用的基礎(chǔ)知識(shí)并附實(shí)例,需要的朋友可以參考下2017-08-08jupyter lab的目錄調(diào)整及設(shè)置默認(rèn)瀏覽器為chrome的方法
這篇文章主要介紹了jupyter lab的目錄調(diào)整及設(shè)置默認(rèn)瀏覽器為chrome的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04matplotlib 向任意位置添加一個(gè)子圖(axes)
這篇文章主要介紹了matplotlib 向任意位置添加一個(gè)子圖(axes),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04python線程優(yōu)先級(jí)隊(duì)列知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理的一篇關(guān)于python線程優(yōu)先級(jí)隊(duì)列知識(shí)點(diǎn)總結(jié),有興趣的朋友們可以學(xué)習(xí)參考下。2021-02-02Tensorflow中的圖(tf.Graph)和會(huì)話(tf.Session)的實(shí)現(xiàn)
這篇文章主要介紹了Tensorflow中的圖(tf.Graph)和會(huì)話(tf.Session)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04特征臉(Eigenface)理論基礎(chǔ)之PCA主成分分析法
這篇文章主要為大家詳細(xì)介紹了特征臉理論基礎(chǔ)之PCA主成分分析法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03