python学习----------re模块之计算器

import re

def form_s(s):
    s = s.replace('++','+')
    s = s.replace('+-','-')
    s = s.replace('-+','-')
    s = s.replace('--','+')
    return s

def mul_sub(s):
    mul_regular = '[-]?d+.?d*[*/][-]?d+.?d*'
    n1 = re.search(mul_regular,s)
    print(n1.group())
    while re.search(mul_regular,s):
        n2=re.search(mul_regular,s).group()

        if n2.count('*') == 1:
            x,y = n2.split('*')
            result = str(float(x)*float(y))
            s = s.replace(n2,result)
            s=form_s(s)
        if n2.count('/') ==1:
            x,y =n2.split('/')
            #print(x,y)
            result = float(x)/float(y)
            result = str(result)
            s=s.replace(n2,result)
            s=form_s(s)
    return s

def add_sub(s):
    add_regular = '-?d+.?d*[-+]d+.?d*'
    #n1 = re.search(add_regular,s)
    #print(n1.group())
    while re.search(add_regular,s):
        n2 = re.search(add_regular,s).group()
        if n2.count('+') == 1:
            x,y =n2.split('+')
            result =str(float(x)+float(y))
            s = s.replace(n2,result)
            s = form_s(s)
        if n2.count('-') == 1:
            x,y = n2.split('-')
            result = str(float(x)-float(y))
            s = s.replace((n2,result))
            s = form_s(s)
    return s

if __name__ == '__main__':
    while 1:
        s=input("请输入计算式(退出按q):")
        if s == 'q':
            exit()
        else:
            print('计算式为',s)
            print('eval result = ',eval(s))
            print('规范式子为:',form_s(s))
            #m1 = re.search('([^()]+)',s)
            #print(m1)
            while re.search('([^()]+)',s):
                m2 = re.search('([^()]+)',s).group()
                re_str = mul_sub(m2)
                #print(re_str)
                re_str = add_sub(re_str)
                #print(re_str)
                s = form_s(s.replace(m2,re_str[1:-1]))
                print(s)

            re_str = mul_sub(s)
            re_str = add_sub(re_str)
            #print(re_str)
            #s= form_s(s.replace(s,re_str[1:-1]))
            print('结果是:',re_str)
原文地址:https://www.cnblogs.com/yujin123456/p/9690430.html