计算器

import re

def add(arg):
    """
    加函数
    :param arg:
    :return:
    """
    arg = arg.replace("++", "+").replace("--", "+").replace("+-", "-").replace("-+", "-")
    num = re.findall("([+\-]?\d+\.?\d*)", arg)
    result = 0
    for i in num:
        result = result + float(i)
    return result

def mul(arg):
    """
    乘除函数
    :param arg:
    :return:
    """
    while True:
        result = re.split("(\d+\.?\d*[\*/][\+-]?\d+\.?\d*)",arg,1)
        if len(result) == 3:
            bef,cen,aft = result
            if "*" in cen:
                num1,num2 = cen.split("*")
                new_cen = float(num1) * float(num2)
                arg = bef +str(new_cen) + aft
            elif "/" in cen:
                num1,num2 = cen.split("/")
                new_cen = float(num1) / float(num2)
                arg = bef + str(new_cen) + aft
        else:
            return add(arg)

def cal(arg):
    """
    匹配最里面的括号
    以里面的括号,切成三部分
    再把括号里的内容,传给运算函数
    :param arg:
    :return:
    """
    while True:
        result = re.split("\(([^()]+)\)",arg,1)
        if len(result) == 3:
            bef,cen,aft = result
            res = mul(cen)
            arg = bef + str(res) + aft
        else:
            return mul(arg)

if __name__ == "__main__":
    ori='1-2*((60+2*(-3-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
    res=cal(ori)
    print(res)

  

posted @ 2017-10-27 20:34  戴成旭  阅读(80)  评论(0)    收藏  举报