作业要求是用正则编写一个计算器,可以计算长公司的计算器
1 # # coding=utf-8 2 # 1,开始入口,写一个formula,直接调用运算方法calc() 3 # 2,首先要去括号,先调用一个while循环的方法,正则方法找出最里层的括号,然后再str方法去括号,将结果进行乘除法计算 4 # 3,乘除法计算,这个乘除法要在上边的while循环里边进行,运费处理掉括号后的formula 5 # 4,先用正则分割的方法,用加减号分割,然后进行去分母去负号。 6 # 5,分母去负号方法:新建一个列表,循环老列表的值有序号,如果最后一个字母是*/,就将他与他后边的数字相‘连’,为了相连,前边要进行str方法。 7 # 把其他的含有*/的字符串,都放到新列表里,这样就形成了一个只有乘除法的列表,且分母可以是负数。返回这个新的列表 8 9 # 6,循环这个列表,把每个元素单独计算,先用split方法进行分割,再用finall方法,找出运算符。 10 # 7,循环分割的元素列表,声明一个运算结果,把第一个元素赋值给第一个结果,然后进行后边的运算,如果运算符是乘号,就进行乘法运算。 11 # 8,将运算结果替换运算公式。进行加减运算。 12 # 9.进行加减运算之前,先把所有运算符进行替换。替换后用+—进行分割,在找出所有加减号 13 # 10,跟乘法一样,先声明一个结果为空,然后如果不为空就进行运算,为空就赋值。运算过程出现加号就加,最后输出结果 14 import re 15 def jiajian(formula): 16 print(formula,'未进行加减号替换运算符的formula') 17 formula=formula.replace('--','+') 18 formula=formula.replace('+-','-') 19 formula=formula.replace('-+','-') 20 formula=formula.replace('++','+') 21 formula=formula.replace("- -", "+") 22 print(formula,'这里把加减号进行替换后的formula') 23 24 sub_yuansu_list = re.split('[+-]', formula) 25 sub_yunsuanfu_list = re.findall('[+-]', formula) 26 print("元素列表与运算符列表",sub_yuansu_list,sub_yunsuanfu_list) 27 # if sub_yuansu_list[0]=='': 28 # sub_yuansu_list[0]=='0' 29 30 print('!!!!!!!!!!!!!!!!!!!!!!!!!!!') 31 if sub_yuansu_list[0] == '': 32 sub_yuansu_list.remove('') 33 sub_yuansu_list.insert(0, '0') 34 print(sub_yuansu_list) 35 res=None 36 for index,i in enumerate(sub_yuansu_list): 37 if res: 38 if sub_yunsuanfu_list[index-1]=='-': #这里要想清楚,因为这里至少是第二次,第二次-1,那么就是元素列表index的第一次 39 res -= float(i) 40 else: 41 res += float(i) 42 else: 43 res=float(i) 44 print('