python练习作业...
import math, re
string = "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()) #字符串去空格
#字符串格式化
def stringFormat(string):
string = string.replace('--', '+')
string = string.replace('-', '+-')
string = string.replace('*+-', '*-')
string = string.replace('/+-', '/-')
return string
#不含括号字符串公式计算函数
def stringCalculate(string):
fResult = 0.0 # 浮点型计算结果
tmpListAdd = list() # 加减法列表
#公式数据拆分
strList = stringFormat(string).split('+')
#第一步先根据加法将字符串分段,如果分段内含有乘除法,则进入乘除法分段计算,否则转化成浮点数,存入列表
for inLoopAdd in strList: #第一层循环---加减法分割
#乘法模块
if'*' in inLoopAdd or '/' in inLoopAdd:
tmpListMulti = list() #乘法列表
for inloopMulti in inLoopAdd.split('*'): #第二层----乘法分割
#除法模块
if '/' in inloopMulti:
divList = inloopMulti.split('/')
fDivResult = float(divList[0])
for inloopDiv in range(len(divList)-1): #第三层-----内层除法计算
fDivResult /= float(divList[inloopDiv+1])
tmpListMulti.append(fDivResult)
else:
tmpListMulti.append(float(inloopMulti))
fMultiResult = 1
for inloop in tmpListMulti:
fMultiResult *= inloop
tmpListAdd.append(fMultiResult)
elif inLoopAdd:
tmpListAdd.append(float(inLoopAdd))
#将各分段结果累加
for fAddResult in tmpListAdd:
fResult += fAddResult
return str(fResult)
#去括号
while('(' in string):
temString = re.search('\([0-9+\-*./]*\)', string).group()
string = string.replace(temString, stringCalculate(temString[1:-1]))
print(stringCalculate(string))
标题名称:通过Python正则表达式实现简单四则运算
文章起源:
http://cxhlcq.com/article/ijhscj.html