之前看到網上有很多網友在問正規表示式去編寫計算器的**,也有很多網友放出了自己的**,所以利用空閒時間
自己也寫了乙個,時間匆忙可能**有些小瑕疵不排除會有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 計算加...