python 利用正则实现简易计算器

来源:互联网 发布:淘宝金牌店铺联盟 编辑:程序博客网 时间:2024/05/20 11:49
#-*-coding:utf-8-*-#__author:martin#date:2017/10/11import  redef f_string(s):   s =  s.replace(' ','')   s = s.replace('++', '+')   s = s.replace('--', '+')   s = s.replace('+-', '-')   return  sdef  cal_mul_div(s): #(33+4*5.5+10/2)   while re.search('\d+\.?\d*[*/]\d+\.?\d*',s) :        ret = re.search('\d+\.?\d*[*/]\d+\.?\d*',s).group()        if ret.count('*'):            x, y = re.split('[*]', ret)            mul = float(x) * float(y)            s =s.replace(ret,str(mul))        if ret.count('/'):            x, y = re.split('[/]', ret)            mul = float(x) / float(y)            s =s.replace(ret,str(mul))   return  sdef cal_plus_sub(s): #(33+22.0-5.0+8-5+9)    while re.search('[\-]?\d+\.?\d*[+][\-]?\d+\.?\d*', s):        ret = re.search('[\-]?\d+\.?\d*[+][\-]?\d+\.?\d*', s).group()        x, y = re.split('[+]', ret)        add = str(float(x)+float(y))        s = s.replace(ret,'+'+add)        s =f_string(s)    while re.search('[\-]?\d+\.?\d*[-][\-]?\d+\.?\d*', s):        ret = re.search('[\-]?\d+\.?\d*[-][\-]?\d+\.?\d*', s).group()        numbers  = re.split('[-]', ret)        if len(numbers) == 3:            result =0            for i in numbers:                if i:                    result -= float(i)        else:            x,y = numbers            result = float(x)-float(y)        s = s.replace(ret,'+'+str(result))        s = f_string(s)    return  sexp = '(1+(3*4)+2+(4*5)-100)'while exp.count('(') > 0:    ret = re.search('\([^()]+\)', exp).group()    replace_str = cal_mul_div(ret)    replace_str = cal_plus_sub(replace_str)    exp = exp.replace(ret,replace_str[1:-1])print(exp.replace('+',''))
原创粉丝点击