1 # 编辑者:闫龙

2 import re #导入re模块(正则表达式)

3 calc2 = "1-2*((60-30+(-40/52)*(9-2*5/3+7/3*-99/4*2998+10*568/14))-(-4*3)/(16-3*2))"

4 calc1 = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"

5 calc = "1-2*((60*30+(-40/5)*(9*2*5/3+7/3*99/4*2998+10*568/14))-(-4*32)/(16-3*2))"

6 def Format(Str):

7 "格式化运算式"

8 Str = Str.replace("+-","-")

9 Str = Str.replace("-+", "-")

10 Str = Str.replace("++", "+")

11 Str = Str.replace("--", "+")

12 return Str

13 def SumCut(Str):

14 while re.search("-?[0-9]+\.?[0-9]*[-+][0-9]+\.?[0-9]*",Str):

15 newRes= re.search("-?[0-9]+\.?[0-9]*[-+][0-9]+\.?[0-9]*",Str)

16 WhatIs = newRes.group()

17 if(WhatIs.find("-") > 0):

18 l = WhatIs.split("-")

19 Str = Str.replace(WhatIs,str(float(l[0])-float(l[1])))

20 elif(WhatIs.find("+") > 0):

21 l = WhatIs.split("+")

22 Str = Str.replace(WhatIs,str(float(l[0])+float(l[1])))

23 return Str.replace("(","").replace(")","")

24 def MulDiv(Str):

25 while re.search("-?[0-9]+\.?[0-9]*[/*].?[0-9]+\.?[0-9]*",Str):

26 newRes= re.search("-?[0-9]+\.?[0-9]*[/*].?[0-9]+\.?[0-9]*",Str)

27 WhatIs = newRes.group()

28 if(WhatIs.find("/") > 0):

29 l = WhatIs.split("/")

30 Str = Str.replace(WhatIs,str(float(l[0])/float(l[1])))

31 elif(WhatIs.find("*") > 0):

32 l = WhatIs.split("*")

33 if(float(l[0])<0 and float(l[1])<0):

34 Str = Str.replace(WhatIs, "+"+str(float(l[0]) * float(l[1])))

35 else:

36 Str = Str.replace(WhatIs,str(float(l[0])*float(l[1])))

37 return Format(Str)

38 while re.search("\([^()]+\)",calc):

39 res = re.search("\([^()]+\)", calc)

40 resTwo = MulDiv(Format(res.group()))

41 resTwo = SumCut(resTwo)

42 calc = calc.replace(res.group(),resTwo)

43 else:

44 resTwo = MulDiv(calc)

45 resTwo = SumCut(resTwo)

46 calc = resTwo

47 print(calc)

以上,我什么也不想说,睡觉!

查看原文