1. 程式人生 > 實用技巧 >re實現計算器

re實現計算器

import re
def mul_div(exp):
    while re.search("[+-]{2,}",exp):
        exp = exp.replace("--", "+")
        exp = exp.replace("-+", "-")
        exp = exp.replace("++", "+")
        exp = exp.replace("+-", "-")
    if '*' in exp:
        a,b=exp.split('*')
        return str(float(a)*float(b))
    
if '/' in exp: a,b=exp.split('/') return str(float(a)/float(b)) if "+" in exp: a,b=exp.split("+") return str(float(a)+float(b)) if "-" in exp: a , b = exp.split("-") return str(float(a) - float(b)) def remove_muldiv(srt): while True: ret
=re.search("\d+\.?\d*[/*]-?\d+\.?\d*",srt) #3*4 if ret: #3*4 son_srt=ret.group() #3*4 2*-1388335.8476190479 res=mul_div(son_srt) #12 srt=srt.replace(son_srt,res) #替換 else: return add_div(srt) def add_div(s): while True: sre
=re.search("[+-]?\d+\.?\d*[+\-]-?\d+\.?\d*",s) #1+6 if sre: s1=sre.group() # 1+6 s2=mul_div(s1) #7 s=s.replace(s1,s2) else: return s def main(s0): s0=s0.replace(" ","") shj=re.findall("[a-z]|[A-Z]",s0) if s0.count("(") == s0.count(")") and s0.count("") == s0.count("") and not shj: while True: s=re.findall("\(([^()]*)\)",s0) #s=['16-8'] ss=re.findall("\([^()]*\)",s0) #s=['(16-8)'] if s : srd=remove_muldiv(s[0]) # 8.0 s0=s0.replace(ss[0],srd) elif s0: print(remove_muldiv(s0)) break else: print("輸入錯誤") main('1 - 2 * ( ( (6 0) -3 0 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )') main("56464+4864564+874*(8745+123-5564+1243+(7+665+-448))")

這個的加減法可能比較low,更高階的加減法看另外一篇文章