1import
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...