作业要求:
开发一个简单的python计算器
- 实现加减乘除及拓号优先级解析
- 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致
import re def clear(Re,res1): Re=re.sub(‘[()]‘,‘‘,Re) res= re.sub(‘\([^()]+\)‘,Re,res1,1) res= re.sub("\+\+|--", "+", res) res= re.sub("\+-|-\+", "-", res) return res def muldiv(res): while re.search(‘-?\d+\.?\d*[\*\/]-?\d+\.?\d*‘,res): Re=re.search(‘-?\d+\.?\d*[\*\/]-?\d+\.?\d*‘,res).group() if re.search(‘-?\d+\.?\d*\*-?\d+\.?\d*‘,Re): m,n=re.split(‘\*‘,Re) total=float(m)*float(n) if re.search(‘-\d+\.?\d*\*-\d+\.?\d*‘,res): res = re.sub("-?\d+\.?\d*\*-?\d+\.?\d*",("+"+str(total)),res,1) return muldiv(res) else: res=re.sub(‘-?\d+\.?\d*\*-?\d+\.?\d*‘,str(total),res,1) return muldiv(res) if re.search(‘-?\d+\.?\d*\/-?\d+\.?\d*‘, Re): m,n=re.split(‘\/‘,Re) total=float(m)/float(n) res=re.sub(‘-?\d+\.?\d*\/-?\d+\.?\d*‘,str(total),res,1) return muldiv(res) return res def addsub(res): while re.search(‘-?\d+\.?\d*[\+\-]-?\d+\.?\d*‘,res): Re=re.search(‘-?\d+\.?\d*[\+\-]-?\d+\.?\d*‘,res).group() if re.search(‘-?\d+\.?\d*\+-?\d+\.?\d*‘,Re): m,n=re.split(‘\+‘,Re) total=float(m)+float(n) res=re.sub(‘-?\d+\.?\d*\+-?\d+\.?\d*‘,str(total),res,1) return addsub(res) if re.search(‘-?\d+\.?\d*\--?\d+\.?\d*‘,Re): m, n = re.split(‘\-‘, Re) total = float(m) - float(n) res = re.sub(‘-?\d+\.?\d*\--?\d+\.?\d*‘, str(total), res, 1) return addsub(res) return res def count(res): while re.search(‘\([^()]+\)‘,res): Re= re.search(‘\([^()]+\)‘,res).group() Re1=muldiv(Re) Re2=addsub(Re1) Clear=clear(Re2, res) return count(Clear) else: Re1 = muldiv(res) Re2 = addsub(Re1) return Re2 s=input(‘请输入想计算的内容:‘) s=re.sub(‘ ‘,‘‘,s) print(count(s))
时间: 2024-10-15 00:08:53