• python 计算器练习


    import re
    def compute_add_sub(s):
        p = re.compile(r'(.*?)([+-]?d*.*d+[+-]d+.*d*)(.*)')
        match = p.search(s)
        if match:
            pre = match.groups()[0]
            middle = match.groups()[1]
            end = match.groups()[2]
            l = re.match(r'([+-]?d*.*d+)([+-])(d+.*d*)',middle).groups()
            result = 0
            if l[1] == '+':
                result = float(l[0]) +  float(l[2])
            elif l[1] == '-':
                result = float(l[0]) - float(l[2])
            s = ("%s%s%s") % (pre,result,end)
            print s
            return compute_add_sub(s)
        else:
            return  s
    
    def compute_mul_div(s):
        p = re.compile(r'(.*?)(d*.*d+[*/][+-]*d+.*d*)(.*)')
        match = p.search(s)
        if match:
            pre = match.groups()[0]
            middle = match.groups()[1]
            end = match.groups()[2]
            l = re.match(r'(d*.*d+)([*/][+-]*)(d+.*d*)',middle).groups()
            print l,'int mul operation'
            result = 0
            if l[1] == '*' or l[1] == '*+' :
                result = float(l[0]) * float(l[2])
            elif l[1] == '/' or l[1] == '/+' :
                result = float(l[0]) / float(l[2])
            elif l[1] == '*-':
                 result = -float(l[0]) * float(l[2])
            elif l[1] == '/-':
                 result = -float(l[0]) / float(l[2])
    
    
            s = ("%s%s%s") % (pre,result,end)
            return compute_mul_div(s)
        else:
            return  s
    
    def complute(inpp):
        p = re.compile(r'[*/]{1}')
        print inpp,'in compute'
        result = compute_mul_div(inpp)
        print result,'after mul div'
    
        result = result.replace('+-','-')
        result = result.replace('-+','-')
        result = result.replace('--','+')
        result = result.replace('++','+')
        result = compute_add_sub(result)
        print result,'in compute result'
        return result
    
    def dealExpression(inpp):
        p = re.compile(r'(.*)(([^)]*))(.*)')
        match = p.match(inpp)
    
        if match:
            pre = match.groups()[0]
            middle = match.groups()[1]
            end = match.groups()[2]
            result =  complute(middle)
            expression = '%s%s%s' % (pre,str(result),end)
            print expression,'express'
            expression = expression.replace('+-','-')
            expression = expression.replace('-+','-')
            expression = expression.replace('--','+')
            expression = expression.replace('++','+')
            return dealExpression(expression)
    
        else:
            inpp = inpp.replace('+-','-')
            inpp = inpp.replace('-+','-')
            inpp = inpp.replace('--','+')
            inpp = inpp.replace('++','+')
            print 'else...............'
            print inpp,'else inpp'
            return complute(inpp)
    
    
    if __name__ == '__main__':
    
        #inpp = "1-2*-30/-12*(-20+200*-3/-200*-300-100)"
        inpp = '1 - 2 * ( (60-30 +(-40.0/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
       # inpp = '1 - 2 * ( (60-30 +(-40.0/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2+2*8) )'
        print eval(inpp)
        print  inpp
        inpp = re.sub(r's*','',inpp)
        print dealExpression(inpp)
  • 相关阅读:
    【Todo】CSDN的《问底》系列-学习
    【Todo】深入PHP内核系列
    【转载】网络攻击技术(三)——Denial Of Service & 哈希相关 & PHP语言 & Java语言
    回溯法
    hdu 2842 Chinese Rings
    JSP 9 大内置对象详解
    用Html5结合Qt制作一款本地化EXE游戏-太空大战(Space War)
    HDU2795 billboard【转化为线段树。】
    URAL 1303
    IOS文件沙盒
  • 原文地址:https://www.cnblogs.com/zhaobin022/p/5050414.html
Copyright © 2020-2023  润新知