正則寫計算器

2022-08-13 02:48:18 字數 2136 閱讀 9204

之前看到網上有很多網友在問正規表示式去編寫計算器的**,也有很多網友放出了自己的**,所以利用空閒時間

自己也寫了乙個,時間匆忙可能**有些小瑕疵不排除會有bug. 還是那句話進攻參考:

import re

unm="1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14) ) - (-4*3)/ (16-3*2) )"

unm=unm.replace(" ","")

def multiplication(unm2): #第一步去除括號

tag=true

while tag:

if re.search("\([^()]+\)+",unm2) and tag:

ret=re.search("\([^()]+\)",unm2) #將括號過濾出來

ret1=ret.group()

ret2=re.search("[^()]+",ret1)

ret3=ret2.group()

p=kuohao(ret3) #括號去除後交給乘除法函式

p=str(p)

unm2=unm2.replace(ret1,p)

else:

p=kuohao(unm2)

print(p)

break

def kuohao(k): #乘除法的運算

tag=true

while tag:

if re.search("(?:\d+)?\.?\d+?[*|/](\-|\+)?(?:\d+)?\.?(?:\d+)?",k) and tag:

ret=re.search("(?:\d+)?\.?\d+?[*|/](\-|\+)?(?:\d+)?\.?(?:\d+)?",k)

ret1=ret.group()

if "/" in ret1:

j=re.split("/",ret1)

o=float(j[0])/float(j[1]) #運算的結果

o=str(o)

k=k.replace(ret1,o) #將運算結果替換至未運算之前

elif "*" in ret1:

j=re.split("\*",ret1)

o=float(j[0])*float(j[1])

o=str(o)

k=k.replace(ret1,o)

else:

add_subtract(k)

return (add_subtract(k))

def add_subtract(k): #加減法運算(最終的結果)

tag=true

while tag:

k=re.sub("--","+",re.sub("\+\+","+",re.sub("-\+","-",re.sub("\+\-","-",k)))) #將重複的加減運算子替換

if re.search("(?:\d+)?\.?\d+?[-](?:\d+)?\.?(?:\d+)?",k) and tag:

ret=re.search("(?:\d+)?\.?\d+?[-](?:\d+)?\.?(?:\d+)?",k)

ret1=(ret.group())

j=re.split("\-",ret1)

o=float(j[0])-float(j[1])

o=str(o)

k=k.replace(ret1,o)

elif re.search("(?:\d+)?\.?\d+?[+](?:\d+)?\.?(?:\d+)?",k) and tag:

ret=re.search("(?:\d+)?\.?\d+?[+](?:\d+)?\.?(?:\d+)?",k)

ret1=(ret.group())

j=re.split("\+",ret1)

o=float(j[0])+float(j[1])

o=str(o)

k=k.replace(ret1,o)

else:

return k

multiplication(unm)

用VB寫計算器

我是沒什麼心思寫計算器的。不過要參加星火杯的話這個坎還是要過一過。emmmm然後發現寫個gui真是步步艱難,先用了vs發現特麼廢流量,再用qt一直蜜汁錯誤。然後。然後最終還是向vb低頭orz 演算法上不存在什麼問題啦。只是不熟悉而且很多細節需要注意。debug幾下就好。最重要的是學到了用程式寫程式的...

python正則練習 計算器

1 實現加減乘除及拓號優先順序解析 2 使用者輸入帶有加減乘除小括號的複雜運算公式後,必須自己解析裡面的 符號和公式,運算後得出結果,結果必須與真實的計算器所得出的結果一致 coding utf 8 import re def check string 檢查是否有其他特殊字元字母,檢查表示式合法性 ...

Python正則表達計算器

計算器 author ryoma time 17 39 import re def add string equ string flag true while flag is right re.search d d d d equ if is right old is right.group 計算加...