计算器(正则练习详细步骤)

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 cacular(s):
import re
def division(a, b):
return float(a) / float(b)
def multiplication(a, b):
return float(a) * float(b)
def subtraction(a, b):
return float(a) - float(b)
def addition(a, b):
return float(a) + float(b)
dic = {"*": multiplication, "/": division, "-": subtraction, "+": addition}
s = s.replace('++', '+')
s = s.replace('+-', '-')
s = s.replace('-+', '-')
s = s.replace("--", '+')
while re.search('[(][^(]*?[)]',s):
brackets=re.search('[(][^(]*?[)]',s).group()
print(f'当前括号内容{brackets}')
re.search('[(][^(]*?[)]',brackets)
brackets_inner = re.search('[(]([^(]*?)[)]', brackets).group(1)
print(f"当前表达式第:{brackets_inner}")
while re.search('\d+\.?\d*[/*]-?\d+\.?\d*',brackets_inner):
first_MAD = re.search("(?P<firstnumber>\d+\.?\d*)(?P<sign>[*/])(?P<secondnumber>-?\d+\.?\d*)", brackets_inner)
value=dic[first_MAD.group('sign')](first_MAD.group('firstnumber'),first_MAD.group('secondnumber'))
brackets_inner=brackets_inner.replace(first_MAD.group(),str(value))
print(brackets_inner)
print('当前乘除法结束')
while re.search('\d+\.?\d*[+-]-?\d+\.?\d*',brackets_inner):
first_ADS = re.search("(?P<firstnumber>\d+\.?\d*)(?P<sign>[+-])(?P<secondnumber>-?\d+\.?\d*)", brackets_inner)
value=dic[first_ADS.group('sign')](first_ADS.group('firstnumber'),first_ADS.group('secondnumber'))
brackets_inner=brackets_inner.replace(first_ADS.group(),str(value))
print(brackets_inner)
print('当前加减法结束')
print(brackets_inner,brackets)
s=s.replace(brackets,brackets_inner)
s = s.replace('++', '+')
s = s.replace('+-', '-')
s = s.replace('-+', '-')
s = s.replace("--", '+')
print('当前括号内容执行完毕')
print(s)
while re.search('\d+\.?\d*[/*]-?\d+\.?\d*', s):
first_MAD = re.search("(?P<firstnumber>\d+\.?\d*)(?P<sign>[*/])(?P<secondnumber>-?\d+\.?\d*)", s)
value = dic[first_MAD.group('sign')](first_MAD.group('firstnumber'), first_MAD.group('secondnumber'))
s = s.replace(first_MAD.group(), str(value))
print(s)
print('当前乘除法结束')
while re.search('\d+\.?\d*[+-]-?\d+\.?\d*', s):
first_MAD = re.search("(?P<firstnumber>\d+\.?\d*)(?P<sign>[+-])(?P<secondnumber>-?\d+\.?\d*)", s)
value = dic[first_MAD.group('sign')](first_MAD.group('firstnumber'), first_MAD.group('secondnumber'))
s = s.replace(first_MAD.group(), str(value))
print(s)
print('当前加减法结束')
return float(s)
cacular(s)

猜你喜欢

转载自www.cnblogs.com/diracy/p/13391181.html