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)