python数学公式代码_PythonStudy_‘数学公式计算器’代码

importre#计算器基本功能函数定义#幂运算:**

defpower(f):'''幂运算,power

:param f: 需要运算的公式,如:f = '2**3'

:return: 幂运算的结果f,str'''

#print(f,type(f)) #测试用

ret = re.split('\*\*',f)if len(ret) == 2:

f= str(float(ret[0])**float(ret[1]))returnf#乘除运算:*|

defcheng_chu(f):'''乘法和除法是同级运算,本函数进行乘除法运算并返回结果。

:param f: 待运算的公式,如2*3、3/4。

:return: 运算结果f,str'''ret= re.split(r'([*/])', f)if len(ret) == 3:if ret[1] == '*':

f= str(float(ret[0]) * float(ret[2]))else:

f= str(float(ret[0]) / float(ret[2]))returnf#加减运算:+-

defjia_jian(f):'''加法和减法是同级运算,本函数进行加减法运算并返回结果。

:param f: 待运算的公式,如2+3、3-4。

:return: 运算结果f,str'''ret= re.split('([+-])', f)if len(ret) == 3:if ret[1] == '+':

f= str(float(ret[0]) + float(ret[2]))else:

f= str(float(ret[0]) - float(ret[2]))returnf#不含()的公式运算#使用自定义函数power()、cheng_chu()、jia_jian()

defno_bracket_formula(fa):'''完成不带括号的公式运算,如:'1+3-3*2'。

:param fa: 待运算的公式,str

:return: 返回运算结果,str'''

#print(fa) # 测试用

#首先,进行幂运算

whileTrue:

ret= re.split('(\d+\.?\d*\*\*\d+\.?\d*)',fa,1)#print(ret) # 测试用

if len(ret) == 3:

ret[1] = power(ret[1])

fa= ret[0] + ret[1] + ret[2]#print(fa) # 测试用

continue

else:break

#print(fa,type(fa)) # 测试用

#其次,进行乘法和除法运算

whileTrue:

ret= re.split('(\d+\.?\d*[*/]\d+\.?\d*)',fa,1)#print(ret) # 测试用

if len(ret) == 3:

ret[1] = cheng_chu(ret[1])

fa= ret[0] + ret[1] + ret[2]#print(fa) # 测试用

continue

else:break

#print(fa, type(fa)) # 测试用

#最后,进行加减运算

whileTrue:if fa == re.match('[-+]?\d+\.?\d*', fa): #只剩下一个数值时,结束

break

else: #不止一个数值时,继续运算

ret = re.split('(\d+\.?\d*)',fa,2) #找到需要运算的两个数值,切割

#print('ret=',ret) # 测试用

if len(ret) == 5:if (ret[0] == ret[2]) or (ret[0] == '' and ret[2] == '+') :

fa= str(ret[0] + jia_jian(ret[1] + '+' + ret[3]) + ret[4])else:

fa= str(ret[0] + jia_jian(ret[1] + '-' + ret[3]) + ret[4])#print(fa) # 测试用

continue

else:break

#print(fa, type(fa)) # 测试用

#返回运算结果

returnfadefmain(fa):'''完成数学公式的运算。

思路:使用re.split()先计算()内部运算式;在求总体结果。

:param fa: 需要进行运算的公式

:return: 公式计算结果'''

whileTrue:#找出进行运算的()内公式

ret = re.split('\(([^()]+)\)',fa,1)#运算()公式,结果替换原公式中()部分

if len(ret) == 3:

ret[1] = str(no_bracket_formula(ret[1]))

fa= ret[0] + ret[1] + ret[2]continue

else:break

returnno_bracket_formula(fa)

#函数调用,进行公式运算,并返回结果

fa = '10**3+(20-(3*5)**(2.4/4.2))/5.5+5-(4*2-3)'ret=main(fa)print(fa,'=',ret)print(eval(fa)) #测试用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值