python利用公式计算_python用re模块实现数学公式计算

importre'''计算字符串表达式'''bracket= re.compile('\([^()]+\)') #查找最内层括号

div = re.compile('(\d+\.?\d*/-\d+\.?\d*)|(\d+\.?\d*/\d+\.?\d*)') #查找除法运算

mul = re.compile('(\d+\.?\d*\*-\d+\.?\d*)|(\d+\.?\d*\*\d+\.?\d*)') #查找乘法运算

add = re.compile('(-\d+\.?\d*\+\d+\.?\d*)|(\d+\.?\d*\+\d+\.?\d*)') #查找加法运算

sub = re.compile('(-\d+\.?\d*-\d+\.?\d*)|(\d+\.?\d*-\d+\.?\d*)') #查找减法运算

c_f=re.compile('\(?\d+\)?')

strip=re.compile('[^()]')defDiv(s):

exp= re.split('/', div.search(s).group())return s.replace(div.search(s).group(), str(float(exp[0]) / float(exp[1])))defMul(s):

exp= re.split('\*', mul.search(s).group())return s.replace(mul.search(s).group(), str(float(exp[0]) * float(exp[1])))defAdd(s):

exp= re.split('\+', add.search(s).group())return s.replace(add.search(s).group(), str(float(exp[0]) + float(exp[1])))defSub(s):

exp=sub.search(s).group()if exp.startswith('-'):

exp= exp.replace('-', '+')

exp= exp.replace('+', '', 1)

res=Add(exp)return s.replace(sub.search(s).group(), '-' +res)else:

exp= re.split('-', sub.search(s).group())return s.replace(sub.search(s).group(), str(float(exp[0]) - float(exp[1])))defcalc():whileTrue:

s= input('请输入等式').replace(' ','')if s=='quit':break

else:whilebracket.search(s):

s_search=bracket.search(s).group()ifdiv.search(s_search):

s=s.replace(s_search,Div(s_search))elifmul.search(s_search):

s=s.replace(s_search,Mul(s_search))elifsub.search(s_search):

s=s.replace(s_search, Sub(s_search))elifadd.search(s_search):

s=s.replace(s_search,Add(s_search))elifc_f.search(s_search):

s=s.replace(s_search,strip.search(s_search).group())print(s)

calc()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值