需求    a.实现加减乘除及拓号优先级解析    b.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) ),计算结果

import redef mul_div(m_d):      # 计算乘除公式    for index, member in enumerate(m_d):        if "*" in member or "/" in member:            oper = re.findall("[*/]", member)            calculation = re.split("[*/]", member)            num = None            for i, e in enumerate(calculation):                if num:                    if oper[i - 1] == "*":                        num *= float(e)                    elif oper[i - 1] == "/":                        num /= float(e)                else:                    num = float(e)            m_d[index] = num    return m_ddef add_sub(oper, num_list):   #计算加减公式    num = None    for i, n in enumerate(num_list):        if num:            if oper[i - 1] == "+":                num += float(n)            elif oper[i - 1] == "-":                num -= float(n)        else:            num = float(n)    return numdef brackets(formula):      #格式化计算公式    formula = re.sub("[()]", "", formula)               # 去除两边的()    formula = formula.replace(" ", "")                  # 去除空字符    formula = formula.replace("+-", "-")                # 定义计算规则,正负得负    formula = formula.replace("--", "+")                # 定义计算规则,负负得正    sign = re.findall("[+-]", formula)   # 取出公式内加减运算符    m_d = re.split("[+-]", formula)    # 以加减运算符切割计算公式,取出带有'*' '/'    if m_d[0] == "":                   # 如果列表第一个字符为空,表示一个数字为负号        m_d[1] = "-" + m_d[1]     # 重新定义带有*/的公式,加上负号        del sign[0]        del m_d[0]    for index, member in enumerate(m_d):      #枚举列表        if member.endswith("*") or member.endswith("/"):            m_d[index] = member + sign[index] + m_d[index + 1]            del m_d[index + 1]            del sign[index]    res=sign, m_d    sign = res[0]    m_d = res[1]    after_m_d = mul_div(m_d)    res = add_sub(sign, after_m_d)    return resdef main(formula):     # 主逻辑,循环取出括号内计算公式并进行公式拼接    while True:        formula_cut = re.search("\([^()]+\)", formula)        if formula_cut:            formula_cut = formula_cut.group()            res = brackets(formula_cut)   # 格式化计算公式            formula = formula.replace(formula_cut, str(res))  # 把括号计算后的内容拼接到计算公式        else:            res = brackets(formula)            print("\33[31;1m结果:%s\33[0m" % (res))            exit()formula=input('''请输入运算公式:格式如:1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )【Q】 退出''')if formula.lower() == 'q':    print('计算器已退出')    exit()main(formula)

测试效果请输入运算公式:格式如:1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )【Q】 退出1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )结果:2776672.6952380957