import re
s = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"
def cheng(s):
s1 = re.search("\d+(\.\d+)?[*/][-]?\d+(\.\d+)?", s)
if s1 is None:
return s
s2 = s1.group()
ret = re.split(r'([*/])',s2)
if ret[1] == "*":
num = float(ret[0]) * float(ret[2])
elif ret[1] == "/":
num = float(ret[0])/float(ret[2])
s2 = s2.replace("*","\*")
s3 = re.sub(s2,str(num),s,1)
return cheng(s3)
def jia(s):
s = s.replace("++","+")
s = s.replace("+-","-")
s = s.replace("--","+")
s1 = re.search("[-]?\d+(\.\d+)?[+-]\d+(\.\d+)?",s)
if s1 is None:
return s
s2 = s1.group()
ret = re.split(r'([+-])',s2)
if ret[0] == "":
if ret[3] == "+":
num = float(ret[2])*(-1) + float(ret[4])
elif ret[3] == "-":
num = float(ret[2])*(-1) - float(ret[4])
else:
if ret[1] == "+":
num = float(ret[0]) + float(ret[2])
elif ret[1] == "-":
num = float(ret[0]) - float(ret[2])
s2 = s2.replace("+", "\+")
s3 = re.sub(s2, str(num), s, 1)
return jia(s3)
def kuohao(s):
ret = re.search("\(([^()]*)\)",s)
if ret is None:
return s
s_w = ret.group()
s1 = ret.group(1)
num = cheng(s1)
num2 = jia(num)
s_w = s_w.replace("(","\(")
s_w = s_w.replace(")","\)")
s_w = s_w.replace("+","\+")
s_w = s_w.replace("*","\*")
s = re.sub(s_w,num2,s,1)
return kuohao(s)
def fun(s):
ret = kuohao(s)
ret1 = cheng(ret)
ret2 = jia(ret1)
return ret2
s = s.replace(" ","")
ret =fun(s)
print(ret)