一个忧郁的python计算器

 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

哎就这样吧!

原文地址:https://www.cnblogs.com/xuzheng940806/p/6791245.html