首页 > 代码库 > 实现计算器
实现计算器
作业要求:
开发一个简单的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))
实现计算器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。