用正規表示式實現的計算器

2022-07-18 10:09:13 字數 2590 閱讀 4954

前面我們有講到python中的re模組,當然用到最多的地方還是爬蟲,由於還有乙個知識點沒講,所以就用re做的乙個計算器給大家熟悉re模組。

首先我們應該先梳理一下計算器的實現過程,當然,有幾種實現方法。先從最簡單的開始講吧。下面是計算器的思考流程。

1,考慮計算的優先順序

()的優先順序最高,其次是乘除,最後是加減

2,算最裡面括號的值,並代替原括號表示式

3,沒有括號的先算乘除,然後算完把最終值,代替成原先表示式

4,沒有括號的算完乘除,計算只有加減的表示式,並且把結果代替成原來表示式

5,迴圈去括號,乘除,加減(在計算過程中記得對--,或者+-等情況的處理)

這是最簡單也是最好理解的方法來實現基礎的計算器。下面的**是根據上面的思路寫出來的。

1

importre2

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)

view code

當然還有很多種,實現方法,還可以寫好處理不同運算符號,然後對應不同的函式。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...