- 1 #!usr/bin/env/ python
- 2 # -*- coding:utf-8 -*-
- 3 # Author: XiaoFeng
- 4 import re
- 5
- 6
- 7 a = '1 - 2 * ( ( 6 0 -3 0 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
- 8 a_new = re.sub(" ", "", a)
- 9 print(a_new)
- 10 ret = re.findall(r"\([^()]*\)", a_new)
- 11 while ret:
- 12 ret = re.findall(r"\([^()]*\)", a_new)
- 13 print(ret)
- 14 for element in ret:
- 15 formula = element
- 16 formula = formula.replace("(", "")
- 17 formula = formula.replace(")", "")
- 18 # print(formula)
- 19 for i in formula:
- 20 if "--" in formula:
- 21 formula = formula.replace("--", "+")
- 22 elif "*" == i:
- 23 handle = re.search(r"[-+]?\d+\.?\d*\*[-+]?\d+\.?\d*", formula)
- 24 if handle:
- 25 handle_list = handle.group()
- 26 else:
- 27 continue
- 28 handle_a, handle_b = re.findall(r"[-+]?\d+\.?\d*", handle_list)
- 29 if "." in handle_a or "." in handle_b:
- 30 result = float(handle_a) * float(handle_b)
- 31 if result >= 0:
- 32 result = "+" + str(result)
- 33 result = str(result)
- 34 else:
- 35 result = int(handle_a) * int(handle_b)
- 36 if result >= 0:
- 37 result = "+" + str(result)
- 38 result = str(result)
- 39 formula = formula.replace(handle_list, result)
- 40 # print(formula)
- 41 elif "/" == i:
- 42 handle = re.search(r"[-+]?\d+\.?\d*/[-+]?\d+\.?\d*", formula)
- 43 if handle:
- 44 handle_list = handle.group()
- 45 else:
- 46 continue
- 47 handle_a, handle_b = re.findall(r"[-+]?\d+\.?\d*", handle_list)
- 48 if "." in handle_a or "." in handle_b:
- 49 result = float(handle_a) / float(handle_b)
- 50 if result >= 0:
- 51 result = "+" + str(result)
- 52 result = str(result)
- 53 else:
- 54 result = int(handle_a) / int(handle_b)
- 55 if result >= 0:
- 56 result = "+" + str(result)
- 57 result = str(result)
- 58 formula = formula.replace(handle_list, result)
- 59 # print(formula)
- 60 for i in formula:
- 61 if "--" in formula:
- 62 formula = formula.replace("--", "+")
- 63 elif "+" == i:
- 64 handle = re.search(r"[-+]?\d+\.?\d*\+[-+]?\d+\.?\d*", formula)
- 65 if handle:
- 66 handle_list = handle.group()
- 67 else:
- 68 continue
- 69 handle_a, handle_b = re.findall(r"[-+]?\d+\.?\d*", handle_list)
- 70 if "." in handle_a or "." in handle_b:
- 71 result = float(handle_a) + float(handle_b)
- 72 if result >= 0:
- 73 result = "+" + str(result)
- 74 result = str(result)
- 75 else:
- 76 result = int(handle_a) + int(handle_b)
- 77 if result >= 0:
- 78 result = "+" + str(result)
- 79 result = str(result)
- 80 formula = formula.replace(handle_list, result)
- 81 # print(formula)
- 82 elif "-" == i:
- 83 handle = re.search(r"[-+]?\d+\.?\d*-[-+]?\d+\.?\d*", formula)
- 84 if handle:
- 85 handle_list = handle.group()
- 86 else:
- 87 continue
- 88 handle_a, handle_b = re.findall(r"[-+]?\d+\.?\d*", handle_list)
- 89 if "." in handle_a or "." in handle_b:
- 90 result = float(handle_a) + float(handle_b)
- 91 if result >= 0:
- 92 result = "+" + str(result)
- 93 result = str(result)
- 94 else:
- 95 result = int(handle_a) + int(handle_b)
- 96 if result >= 0:
- 97 result = "+" + str(result)
- 98 result = str(result)
- 99 formula = formula.replace(handle_list, result)
- 100 # print(formula)
- 101 # print(formula)
- 102 # print(element)
- 103 a_new = a_new.replace(element, formula)
- 104 # print(a_new)
- 105 print("------------")
- 106 print(a_new)
- 107 formula = a_new
- 108 for i in formula:
- 109 if "--" in formula:
- 110 formula = formula.replace("--", "+")
- 111 elif "*" == i:
- 112 handle = re.search(r"[-+]?\d+\.?\d*\*[-+]?\d+\.?\d*", formula)
- 113 if handle:
- 114 handle_list = handle.group()
- 115 else:
- 116 continue
- 117 handle_a, handle_b = re.findall(r"[-+]?\d+\.?\d*", handle_list)
- 118 if "." in handle_a or "." in handle_b:
- 119 result = float(handle_a) * float(handle_b)
- 120 if result >= 0:
- 121 result = "+" + str(result)
- 122 result = str(result)
- 123 else:
- 124 result = int(handle_a) * int(handle_b)
- 125 if result >= 0:
- 126 result = "+" + str(result)
- 127 result = str(result)
- 128 formula = formula.replace(handle_list, result)
- 129 print(formula)
- 130 elif "/" == i:
- 131 handle = re.search(r"[-+]?\d+\.?\d*/[-+]?\d+\.?\d*", formula)
- 132 if handle:
- 133 handle_list = handle.group()
- 134 else:
- 135 continue
- 136 handle_a, handle_b = re.findall(r"[-+]?\d+\.?\d*", handle_list)
- 137 if "." in handle_a or "." in handle_b:
- 138 result = float(handle_a) / float(handle_b)
- 139 if result >= 0:
- 140 result = "+" + str(result)
- 141 result = str(result)
- 142 else:
- 143 result = int(handle_a) / int(handle_b)
- 144 if result >= 0:
- 145 result = "+" + str(result)
- 146 result = str(result)
- 147 formula = formula.replace(handle_list, result)
- 148 print(formula)
- 149 print("=========")
- 150 for i in formula:
- 151 if "--" in formula:
- 152 formula = formula.replace("--", "+")
- 153 elif "+" == i:
- 154 handle = re.search(r"[-+]?\d+\.?\d*\+[-+]?\d+\.?\d*", formula)
- 155 if handle:
- 156 handle_list = handle.group()
- 157 else:
- 158 continue
- 159 handle_a, handle_b = re.findall(r"[-+]?\d+\.?\d*", handle_list)
- 160 if "." in handle_a or "." in handle_b:
- 161 result = float(handle_a) + float(handle_b)
- 162 if result >= 0:
- 163 result = "+" + str(result)
- 164 result = str(result)
- 165 else:
- 166 result = int(handle_a) + int(handle_b)
- 167 if result >= 0:
- 168 result = "+" + str(result)
- 169 result = str(result)
- 170 formula = formula.replace(handle_list, result)
- 171 print(formula)
- 172 elif "-" == i:
- 173 handle = re.search(r"[-+]?\d+\.?\d*-[-+]?\d+\.?\d*", formula)
- 174 if handle:
- 175 handle_list = handle.group()
- 176 else:
- 177 continue
- 178 handle_a, handle_b = re.findall(r"[-+]?\d+\.?\d*", handle_list)
- 179 if "." in handle_a or "." in handle_b:
- 180 result = float(handle_a) + float(handle_b)
- 181 if result >= 0:
- 182 result = "+" + str(result)
- 183 result = str(result)
- 184 else:
- 185 result = int(handle_a) + int(handle_b)
- 186 if result >= 0:
- 187 result = "+" + str(result)
- 188 result = str(result)
- 189 formula = formula.replace(handle_list, result)
- 190 print(formula)