python练习作业...

importmath,restring="1.5-2.4*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"string=''.join(string.split())#字符串去空格#字符串格式化defstringFormat(string):string=string.replace('--','+')string=string.replace('-','+-')string=string.replace('*+-','*-')string=string.replace('/+-','/-')returnstring#不含括号字符串公式计算函数defstringCalculate(string):fResult=0.0#浮点型计算结果tmpListAdd=list()#加减法列表#公式数据拆分strList=stringFormat(string).split('+')#第一步先根据加法将字符串分段,如果分段内含有乘除法,则进入乘除法分段计算,否则转化成浮点数,存入列表forinLoopAddinstrList:#第一层循环---加减法分割#乘法模块if'*'ininLoopAddor'/'ininLoopAdd:tmpListMulti=list()#乘法列表forinloopMultiininLoopAdd.split('*'):#第二层----乘法分割#除法模块if'/'ininloopMulti:divList=inloopMulti.split('/')fDivResult=float(divList[0])forinloopDivinrange(len(divList)-1):#第三层-----内层除法计算fDivResult/=float(divList[inloopDiv+1])tmpListMulti.append(fDivResult)else:tmpListMulti.append(float(inloopMulti))fMultiResult=1forinloopintmpListMulti:fMultiResult*=inlooptmpListAdd.append(fMultiResult)elifinLoopAdd:tmpListAdd.append(float(inLoopAdd))#将各分段结果累加forfAddResultintmpListAdd:fResult+=fAddResultreturnstr(fResult)#去括号while('('instring):temString=re.search('\([0-9+\-*./]*\)',string).group()string=string.replace(temString,stringCalculate(temString[1:-1]))print(stringCalculate(string))