1 import re 2 def input_process(formula): 3 #替换运算符 4 formula = formula.replace(" ", "") 5 formula = formula.replace("+-", "-") 6 formula = formula.replace("--", "+") 7 return formula 8 def muldiv(formula_list): 9 ''' 10 计算公式里面的乘除 11 element(元素),ope(运算符列表operators),calc_list(计算清单) 12 ''' 13 for index, element in enumerate(formula_list): 14 if "*" in element or "/" in element: 15 ope = re.findall("[*/]", element) 16 calc_list = re.split("[*/]", element) 17 num = None 18 for i, e in enumerate(calc_list): 19 if num: 20 if ope[i - 1] == "*": 21 num *= float(e) 22 elif ope[i - 1] == "/": 23 num /= float(e) 24 else: 25 num = float(e) 26 formula_list[index] = num 27 return formula_list 28 def plumin(ope, num_list): 29 ''' 30 加减 31 :operators: 运算符列表 32 :num_list: 进行运算的数字列表 33 ''' 34 num = None 35 for i, e in enumerate(num_list): 36 if num: 37 if ope[i - 1] == "+": 38 num += float(e) 39 elif ope[i - 1] == "-": 40 num -= float(e) 41 else: 42 num = float(e) 43 return num 44 def merge(plusminus, calculate_list): 45 ''' 46 合并 47 :plusminus:加减符 48 :calculate_list:乘除列表 49 ''' 50 for index, element in enumerate(calculate_list): 51 if element.endswith("*") or element.endswith("/"): 52 calculate_list[index] = element + plusminus[index] + calculate_list[index + 1] 53 del calculate_list[index + 1] 54 del plusminus[index] 55 return merge(plusminus, calculate_list) 56 return plusminus, calculate_list 57 def Internal_calc(formula): 58 ''' 59 对括号最内层的公式进行计算 60 :Internal_calc:内部计算 61 ''' 62 formula = re.sub("[()]", "", formula) # 去除两边的() 63 formula = input_process(formula) 64 plus_minus = re.findall("[+-]", formula) # 列表 '+' '-' 运算符 65 calculate_list = re.split("[+-]", formula) # 列表 有'*' '/' 66 if calculate_list[0] == "": # multiply_divide_list列表第一个字符为空的话,表示一个数字为负号 67 calculate_list[1] = "-" + calculate_list[1] 68 del plus_minus[0] 69 del calculate_list[0] 70 res = merge(plus_minus, calculate_list) 71 plus_minus = res[0] # 列表 '+' '-' 运算符 进行合并处理 72 calculate_list = res[1] 73 plus_minus_list = muldiv(calculate_list) # 生成只进行加减运算的列表 74 res = plumin(plus_minus, plus_minus_list) 75 return res 76 77 def calculate(formula): 78 '''先计算()里的值,算出来后再算乘除,再算加减''' 79 while True: 80 a = re.search("([^()]+)", formula) 81 if a: 82 a = a.group() 83 res = Internal_calc(a) 84 formula = formula.replace(a, str(res)) 85 #print("33[34;1m%s33[0m" % (formula)) 86 else: 87 res = Internal_calc(formula) 88 print("结果:%s" % (res)) 89 exit() 90 91 92 if __name__ == '__main__': 93 while True: 94 formula = "".join(input('请输入需要计算的算式').split()) 95 calculate(formula) 96 if format : 97 exit() 98 else: 99 continue
哎就这样吧!