前面我們有講到python中的re模組,當然用到最多的地方還是爬蟲,由於還有乙個知識點沒講,所以就用re做的乙個計算器給大家熟悉re模組。
首先我們應該先梳理一下計算器的實現過程,當然,有幾種實現方法。先從最簡單的開始講吧。下面是計算器的思考流程。
1,考慮計算的優先順序
()的優先順序最高,其次是乘除,最後是加減
2,算最裡面括號的值,並代替原括號表示式
3,沒有括號的先算乘除,然後算完把最終值,代替成原先表示式
4,沒有括號的算完乘除,計算只有加減的表示式,並且把結果代替成原來表示式
5,迴圈去括號,乘除,加減(在計算過程中記得對--,或者+-等情況的處理)
這是最簡單也是最好理解的方法來實現基礎的計算器。下面的**是根據上面的思路寫出來的。
1view codeimportre2
defdeal_false(exp):3#
處理當符號沒有省略
4 exp=exp.replace('
--','
+')#
把--變為+
5 exp=exp.replace('
+-','
-')#
把+-變為-
6return
exp7
defdeal_bracket(exp):8#
處理最裡面的那一層括號
9while
true:
10 new_exp=re.search('
\([^()]+\)
',exp)#
篩選最裡層的括號內容
11if
new_exp:
12 new_exp=new_exp.group()
13 res=calculate(new_exp)
14 exp=exp.replace(new_exp,res)
15 exp =deal_false(exp)
16else
:17 exp =deal_false(exp)
18 res=calculate(exp)
19 exp=exp.replace(exp,res)
20return
exp21
defcalculate(exp):22#
計算沒有括號的式子23#
exp=exp.strip("()")
24while
true:
25 mul_exp = re.search('
-?\d+\.?\d*[*/]-?\d+\.?\d*
', exp)#
篩選乘除法表示式
26if
mul_exp:
27 mul_exp =mul_exp.group()
28 res =calculate_mul(mul_exp)
29 exp =exp.replace(mul_exp, res)
30else
:31 res=calculate_add(exp)
32 exp =exp.replace(exp, res)
33return
exp34
defcalculate_mul(exp):35#
計算乘法或者除法
36if'*
'inexp:
37 x,y=exp.split('*'
)38return str(float(x)*float(y))
39elif'/
'inexp:
40 x,y=exp.split('/'
)41return str(float(x)/float(y))
42def
calculate_add(exp):43#
計算只有加減法
44 sum=0
45 exp=re.findall('
-?\d+\.?\d*
',exp)
46for i in
exp:
47 sum+=float(i)
48return
str(sum)
49def
main(exp):50#
主函式,計算機的入口
51 exp=exp.replace('
','')#
去掉空格
52print
(deal_bracket(exp))
53if
__name__ == '
__main__':
54 x=input("
>>>>")
55 main(x)
當然還有很多種,實現方法,還可以寫好處理不同運算符號,然後對應不同的函式。emmmm,有時間我會補充在後面的,計算器還是比較簡單,只要你去寫了,去實現了還是會有很大的收穫的。
用正規表示式實現的計算器
前面我們有講到python中的re模組,當然用到最多的地方還是爬蟲,由於還有乙個知識點沒講,所以就用re做的乙個計算器給大家熟悉re模組。首先我們應該先梳理一下計算器的實現過程,當然,有幾種實現方法。先從最簡單的開始講吧。下面是計算器的思考流程。1,考慮計算的優先順序 的優先順序最高,其次是乘除,最...
正規表示式實現計算器
author 來童星 date 2019 11 10 import re source 1 2 60 30 40 5 9 2 5 3 7 3 99 4 2998 10 568 14 4 3 16 3 2 做檢查 def check s flag true if re.findall a za z s...
計算器 (正規表示式
寫個計算器,輸入完全符合要求的 數字組成的表示式,計算相應結果。思路分先後順序遞迴拆解式子。先對 符合進行遞迴,直到全是 表示式,再對 表示式進行遞迴直到只有數字。最後返回計算。include using namespace std define maxn 100005 define maxm 10...