首页 > 编程语言 > 详细

python 计算器练习

时间:2015-12-16 12:19:40      阅读:166      评论:0      收藏:0      [点我收藏+]
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)

 

python 计算器练习

原文:http://www.cnblogs.com/zhaobin022/p/5050414.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!