python正则实现计算器功能
本文实例为大家分享了python正则实现计算器功能的具体代码,供大家参考,具体内容如下
#-*-coding:utf-8-*- #Author:Gogh #@Time:2017/12/420:16 #@Email:361910002@qq.com importre defoperator_update(formula): #对formula公式进行去除空字符,更新运算符处理 formula=formula.replace("","")#去除空字符 formula=formula.replace("+-","-") formula=formula.replace("--","+") returnformula defcalc_muldiv(formula_list): ''''' 计算公式里面的乘除 :paramformula:列表 :return: ''' forindex,elementinenumerate(formula_list): if"*"inelementor"/"inelement: operators=re.findall("[*/]",element) calc_list=re.split("[*/]",element) num=None fori,einenumerate(calc_list): ifnum: ifoperators[i-1]=="*": num*=float(e) elifoperators[i-1]=="/": num/=float(e) else: num=float(e) formula_list[index]=num returnformula_list defcalc_plumin(operators,num_list): ''''' 计算列表数字的加减 :paramoperators:运算符列表 :paramnum_list:进行运算的数字列表 :return:返回计算结果 ''' num=None fori,einenumerate(num_list): ifnum: ifoperators[i-1]=="+": num+=float(e) elifoperators[i-1]=="-": num-=float(e) else: num=float(e) returnnum defmerge(plus_minus_operator,multiply_divide_list): ''''' 把列表中这样的形式'2*''-3*''5/3*''4/2'合并到一块 :paramformula_list: :return: ''' forindex,elementinenumerate(multiply_divide_list): ifelement.endswith("*")orelement.endswith("/"): multiply_divide_list[index]=element+plus_minus_operator[index]+multiply_divide_list[index+1] delmultiply_divide_list[index+1] delplus_minus_operator[index] returnmerge(plus_minus_operator,multiply_divide_list) returnplus_minus_operator,multiply_divide_list defbracket_calc(formula): ''''' 对括号最内层的formula公式进行计算 :paramformula: :return: ''' formula=re.sub("[()]","",formula)#去除两边的() formula=operator_update(formula) plus_minus_operator=re.findall("[+-]",formula)#列表'+''-'运算符 multiply_divide_list=re.split("[+-]",formula)#列表有'*''/' ifmultiply_divide_list[0]=="":#multiply_divide_list列表第一个字符为空的话,表示一个数字为负号 multiply_divide_list[1]="-"+multiply_divide_list[1] delplus_minus_operator[0] delmultiply_divide_list[0] res=merge(plus_minus_operator,multiply_divide_list) plus_minus_operator=res[0]#列表'+''-'运算符进行合并处理 multiply_divide_list=res[1] plus_minus_list=calc_muldiv(multiply_divide_list)#生成只进行加减运算的列表 res=calc_plumin(plus_minus_operator,plus_minus_list) returnres defcalculate(formula): '''''计算程序主入口,主要逻辑是先计算拓号里的值,算出来后再算乘除,再算加减''' whileTrue: formula_depth=re.search("[()]+",formula) ifformula_depth: formula_depth=formula_depth.group() res=bracket_calc(formula_depth) formula=formula.replace(formula_depth,str(res)) print("\33[34;1m%s\33[0m"%(formula)) else: res=bracket_calc(formula) print("\33[31;1m结果:%s\33[0m"%(res)) exit() if__name__=='__main__': formula="1-2*((60-30+(-9-2-5-2*-3-5/3-40*4/2-3/5+6*3)*(-9-2-5-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))" calculate(formula)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。