import re
def add(arg):
"""
加函数
:param arg:
:return:
"""
arg = arg.replace("++", "+").replace("--", "+").replace("+-", "-").replace("-+", "-")
num = re.findall("([+\-]?\d+\.?\d*)", arg)
result = 0
for i in num:
result = result + float(i)
return result
def mul(arg):
"""
乘除函数
:param arg:
:return:
"""
while True:
result = re.split("(\d+\.?\d*[\*/][\+-]?\d+\.?\d*)",arg,1)
if len(result) == 3:
bef,cen,aft = result
if "*" in cen:
num1,num2 = cen.split("*")
new_cen = float(num1) * float(num2)
arg = bef +str(new_cen) + aft
elif "/" in cen:
num1,num2 = cen.split("/")
new_cen = float(num1) / float(num2)
arg = bef + str(new_cen) + aft
else:
return add(arg)
def cal(arg):
"""
匹配最里面的括号
以里面的括号,切成三部分
再把括号里的内容,传给运算函数
:param arg:
:return:
"""
while True:
result = re.split("\(([^()]+)\)",arg,1)
if len(result) == 3:
bef,cen,aft = result
res = mul(cen)
arg = bef + str(res) + aft
else:
return mul(arg)
if __name__ == "__main__":
ori='1-2*((60+2*(-3-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
res=cal(ori)
print(res)