计算器 等式
#!/usr/bin/env python # -*- coding: utf-8 -*- # @File : calculators.py # @Author: Anthony.waa # @Date : 2018/8/13 0013 # @Desc : example = '- 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 *568/14 )) - (-4*3)/ (16-3*2) )' import re bracket = re.compile(r'([^()]+)') # 找括号 multiplys = re.compile(r'(d+.?d**-d+.?d*)|(d+.?d**d+.?d*)') # 找乘法 divides = re.compile(r'(d+.?d*/-d+.?d*)|(d+.?d*/d+.?d*)') # 找除法 adds = re.compile(r'(-?d+.?d*+-d+.?d*)|(-?d+.?d*+d+.?d*)') # 找加法 subtracts = re.compile(r'(-?d+.?d*--d+.?d*)|(-?d+.?d*-d+.?d*)') # 找减法 out_cal = re.compile(r'(?+?-?d+)?') # 验证等式是否计算完成 out_strip = re.compile(r'[^(].*[^)]') # 去除最后括号 def Add(s): # 加法运算 result = re.split(r'+', adds.search(s).group()) return s.replace(adds.search(s).group(), str(float(result[0]) + float(result[1]))) def Subtract(s): # 减法运算 result = subtracts.search(s).group() if result.startswith('-'): result = result.replace('-', '+') res = Add(result).replace('+', '-') else: result = re.split(r'-', result) res = str(float(result[0]) - float(result[1])) return s.replace(subtracts.search(s).group(), res) def Multiply(s): # 乘法运算 result = re.split(r'*', multiplys.search(s).group()) return s.replace(multiplys.search(s).group(), str(float(result[0]) * float(result[1]))) def Divide(s): # 除法运算 result = re.split(r'/', divides.search(s).group()) return s.replace(divides.search(s).group(), str(float(result[0]) / float(result[1]))) def calculatoring(): # 开始计算 while True: print('-'*90) print('提示: 输入(q/exit/n),任意一个即可退出运算') print('例如: - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 *568/14 )) - (-4*3)/ (16-3*2) )') beginning = input('请输入一个符合加减乘除法运算的等式:').strip() if beginning.lower() == 'q' or beginning.lower() == 'exit' or beginning.lower() == 'n': break else: beginning = ''.join([i for i in re.split('s+', beginning)]) # 去除等式中的空格 if not beginning.startswith('('): beginning = str('(%s)' % beginning) while bracket.search(beginning): # 循环计算括号中的等式 beginning = beginning.replace('--', '+') beginning_search = bracket.search(beginning).group() # 正式开始等式计算 beginning..... # 计算顺序 除法--> 乘法 --> 减法 --> 加法 if divides.search(beginning_search): # 除法 beginning = beginning.replace(beginning_search, Divide(beginning_search)) elif multiplys.search(beginning_search): # 乘法 beginning = beginning.replace(beginning_search, Multiply(beginning_search)) elif subtracts.search(beginning_search): # 减法 beginning = beginning.replace(beginning_search,Subtract(beginning_search)) elif adds.search(beginning_search): # 加法 beginning = beginning.replace(beginning_search,Add(beginning_search)) elif out_cal.search(beginning_search): # 去除最后的括号 查看等式运算是否计算完毕 beginning = beginning.replace(beginning_search,out_strip.search(beginning_search).group()) print('该等式计算结果约为:%.2f'%float(beginning)) print() if __name__ == '__main__': calculatoring()