import re
def AP(formula):
formula = formula.replace('+-','-')
formula = formula.replace('-+','-')
formula = formula.replace('--','+')
return formula
def compute_MD(formula):
ope = re.findall('[*/]',formula)
mun = re.split('[*/]',formula)
for index,i in enumerate(ope):
mun[index]=float(mun[index])
while ope!=[]:
if ope[index] == '*':
mun[index] *= float(mun[index+1])
del mun[index+1],ope[index]
elif ope[index] == '/':
mun[index] /= float(mun[index+1])
del mun[index+1],ope[index]
return mun[index]
def compute_AP(f1,f2):
for index,i in enumerate(f1):
f2[index] = float(f2[index])
while len(f1) > 0:
if f1[index] == '-':
f2[index]-=float(f2[index+1])
del f2[index+1],f1[index]
else:
f2[index] += float(f2[index + 1])
del f2[index +1], f1[index]
return f2[index]
def compute(formula):
formula = AP(formula)
ope = re.findall('[+-]',formula)
mun = re.split('[+-]',formula)
for index,i in enumerate(mun):
if mun[index] == '':
mun[index+1] = '-' + mun[index + 1]
del mun[index],ope[index]
while mun[index].endswith('/') or mun[index].endswith('*'):
mun[index+1] = AP('-' + mun[index]+mun[index+1])
del mun[index],ope[index]
for index,i in enumerate(mun):
if i.find('*')>0 or i.find('/')>0 :
mun[index] = compute_MD(i)
if ope == []:
return mun[index]
return compute_AP(ope,mun)
def calc(formula):
parenthesise_flag = True
while parenthesise_flag:
formula = formula.replace(' ','')
m = re.search('\([^()]+\)',formula)
if m:
m2 = str(compute(m.group().strip('()')))
formula = formula.replace(m.group(),m2)
else:
formula = compute(formula)
parenthesise_flag = False
return formula
if __name__ == '__main__':
res = calc('''
公式内容
''')
print('结果:',res)