計算器 利用re模組 利用函式封裝 第二版

2022-01-30 13:32:37 字數 3096 閱讀 5018

1

import

re2 remove_parentheses = re.compile('

\([^()]+\)')

34def remove_parentheses(obj, s): #

找到內層的括號並且返回單個括號

5while

obj.search(s):

6 ret =obj.search(s).group()

7if ('*'

in ret) or ('/'

inret): # 判斷括號裡是否有乘法 除法

8 ret1 =ride_div(ret)      # 有則呼叫 ride_div() 函式

9 s =s.replace(ret, ret1)    # 把乘法後的返回值進行重新賦值, 在乘法的函式裡 還呼叫了加減法的函式, 詳情看往下看.

10else

:11 ret2 =add_sub(ret)      # 若沒有 乘除法 則直接呼叫 加減法的函式 add_sub()

12 s =s.replace(ret, ret2)    #把加減法後的返回值 重新賦值.

13returns14

1516

def ride_div(s): #

求乘除法的值

17while re.search('

\d+(\.\d+)?[*/]-?\d+(\.\d+)?

', s): #用 search判斷 若不是none則繼續進行

18minus(s)                          # 此函式是為了把 -- -+ +- ++ 替換成 單個的

19 ret = re.search('

\d+(\.\d+)?[*/]-?\d+(\.\d+)?

', s).group()

20 a, d ,b = re.split('

([/*])

', ret)

21if d == '*'

:22 sum = float(a) *float(b)

23 s =s.replace(ret, str(sum))      # 把得到的積 重新賦值

24elif d == '/'

:25 sum = float(a) /float(b)

26 s =s.replace(ret, str(sum)) # 把得到的商 重新賦值

27else

:28 ret_new =add_sub(s) # 此處是為了當while 條件為none時 呼叫加減法, 把值相加或相減

29return ret_new.strip('

(').strip(')'

) # 最後得到乙個數字 進行返回

3031

3233

def add_sub(s): #

求加減的值

34while re.search('

-?\d+(\.\d+)?[+-]-?\d+(\.\d+)?

', s):

35 s =minus(s)

36 ret = re.search('

(?p-?\d+(\.\d+)?)(?p[+-])(?p-?\d+(\.\d+)?)

', s) # 此處,因為用切割的話 會有bug, 所以選擇了用 分組的命名

37 a = ret.group('a'

)38 d = ret.group('d'

)39 b = ret.group('b'

)40if d == '+'

:41 sum = float(a) +float(b)

42elif d == '-'

:43 sum = float(a) -float(b)

44 s =s.replace(ret.group(0), str(sum))

45 s = s.strip('

(').strip(')'

)46returns47

4849

defminus(s): #更改 不和諧的 符號

50while ('--'

in s) or ('-+'

in s) or ('+-'

in s) or ('++'

ins) :

51 s = s.replace('

--','+'

)52 s = s.replace('

-+','-'

)53 s = s.replace('

+-','-'

)54 s = s.replace('

++','+'

)55returns56

5758

defmain(): # 主函式

59while 1:

60 s = input('

請輸入你要計算的式子,輸入回車退出程式:

').strip().replace('

', '')61

ifnot

s:62

break

63if"(

"ins:64 ret1 =remove_parentheses(remove_parentheses, s)

65 ret2 =ride_div(ret1)

66 ret3 =add_sub(ret2)

67print

(ret3)

68else

:69 ret2 =ride_div(s)

70 ret3 =add_sub(ret2)

71print

(ret3)

7273 main()

利用函式指標陣列寫計算器

陣列是存放相同資料型別元素的儲存空間,指標是存放資料元素的位址的。那我們要把很多函式的位址放入乙個陣列,該如何定義呢?int p 10 int x,int y p先和結合是陣列,陣列的內容是int 的函式指標。具體應用 先展示普通計算器 include include void menu float...

利用python實現計算器

通過聯絡可以熟練掌握,正規表示式,迴圈,以及字串操作。print 請輸入您要計算的算術表示式!def str test scanf def inner ret scanf tmp re.search d ret if tmp none print error return true,ret elif...

利用棧實現簡易計算器

輸入數學表示式,輸出結果。其中符號支援加減乘除 乘方及括號,數字支援小數及負數。開兩個陣列,乙個陣列為符號棧,乙個陣列為數字棧。字串讀入表示式並逐位處理,有數字就擷取下來存入數字棧,運算符號截下來存入符號棧,若發現當前符號優先順序小於等於前乙個符號的優先順序,就要把前面那部分的值計算出來,例如3 2...