import re
def f_string(s):
s = s.replace(' ','')
s = s.replace('++', '+')
s = s.replace('--', '+')
s = s.replace('+-', '-')
return s
def cal_mul_div(s):
while re.search('\d+\.?\d*[*/]\d+\.?\d*',s) :
ret = re.search('\d+\.?\d*[*/]\d+\.?\d*',s).group()
if ret.count('*'):
x, y = re.split('[*]', ret)
mul = float(x) * float(y)
s =s.replace(ret,str(mul))
if ret.count('/'):
x, y = re.split('[/]', ret)
mul = float(x) / float(y)
s =s.replace(ret,str(mul))
return s
def cal_plus_sub(s):
while re.search('[\-]?\d+\.?\d*[+][\-]?\d+\.?\d*', s):
ret = re.search('[\-]?\d+\.?\d*[+][\-]?\d+\.?\d*', s).group()
x, y = re.split('[+]', ret)
add = str(float(x)+float(y))
s = s.replace(ret,'+'+add)
s =f_string(s)
while re.search('[\-]?\d+\.?\d*[-][\-]?\d+\.?\d*', s):
ret = re.search('[\-]?\d+\.?\d*[-][\-]?\d+\.?\d*', s).group()
numbers = re.split('[-]', ret)
if len(numbers) == 3:
result =0
for i in numbers:
if i:
result -= float(i)
else:
x,y = numbers
result = float(x)-float(y)
s = s.replace(ret,'+'+str(result))
s = f_string(s)
return s
exp = '(1+(3*4)+2+(4*5)-100)'
while exp.count('(') > 0:
ret = re.search('\([^()]+\)', exp).group()
replace_str = cal_mul_div(ret)
replace_str = cal_plus_sub(replace_str)
exp = exp.replace(ret,replace_str[1:-1])
print(exp.replace('+',''))