python开发基础----re模块作业之计算器

import re

def reckon(formula):
    '''
    计算函数
    :param formula:  用户传入的公式字符串
    :return:
    '''
    re_formula = re.search('\([^()]+\)',formula)
    if re_formula:
        result = multiply_divide(re_formula.group()[1:-1])
        return reckon(formula.replace(re_formula.group(), str(result)))
    return multiply_divide(formula)


def plus_minus(formula):
    '''
    加减运算
    :param formula:
    :return:
    '''
    re_formula = re.search('\d+\.*\d*[+\-]\d+\.*\d*', formula)
    if re_formula:
        if re_formula.group().find("+") != -1:
            num = re_formula.group().split("+")
            result = float(num[0]) + float(num[1])
            return multiply_divide(formula.replace(re_formula.group(), str(result)))
        else:
            num = re_formula.group().split("-")
            result = int(float[0]) - float(num[1])
            return multiply_divide(formula.replace(re_formula.group(), str(result)))
    return formula

# def is_operator(operator,formula):
#     if formula.find(operator) != -1:
#         num = formula.split(operator)
#         if operator == "+":
#             result = float(num[0]) + float(num[1])
#         elif operator == "-":
#             result = float(num[0]) - float(num[1])
#         elif operator == "*":
#             result = float(num[0]) * float(num[1])
#         else:
#             result = float(num[0]) / float(num[1])
#         return result
#     else:
#         print("操作符有误!")
#         exit(11)


def multiply_divide(formula):
    '''
    乘除运算
    :param formula:
    :return:
    '''
    re_formula = re.search("\d+\.*\d*[*/]\d+\.*\d*", formula)
    if re_formula:
        if re_formula.group().find("*") != -1:
            num = re_formula.group().split("*")
            result = float(num[0]) * float(num[1])
            return multiply_divide(formula.replace(re_formula.group(),str(result)))
        else:
            num = re_formula.group().split("/")
            result = float(num[0]) / float(num[1])
            return multiply_divide(formula.replace(re_formula.group(), str(result)))
    return plus_minus(formula)

if __name__ == '__main__':
    a = "12+32+93*23*(12/32*12)+(12*24/10+(12*23+20+(10*10/5)))*19*(1+2+3/2)*20*(1+2+3+(5*9+(10/12)))"
    print(reckon(a))

 

import re

def reckon(formula):
    '''
    计算函数
    :param formula:  用户传入的公式字符串
    :return:
    '''
    re_formula = re.findall('\([^()]+\)',formula)
    if re_formula:
        result = multiply_divide(re_formula[0][1:-1])
        return reckon(formula.replace(re_formula[0],str(result)))

    return multiply_divide(formula)


def plus_minus(formula):
    '''
    加减运算
    :param formula:
    :return:
    '''
    re_formula = re.findall('\d+\.*\d*[+\-]\d+\.*\d*',formula)
    if re_formula:
        if re_formula[0].find("+") != -1:
            num = re_formula[0].split("+")
            result = float(num[0]) + float(num[1])
            return multiply_divide(formula.replace(re_formula[0], str(result)))
        else:
            num = re_formula[0].split("-")
            result = int(float[0]) - float(num[1])
            return multiply_divide(formula.replace(re_formula[0], str(result)))
    return formula


#def is_operator(operator,formula):
#     if formula.find(operator) != -1:
#         num = formula.split(operator)
#         if operator == "+":
#             result = float(num[0]) + float(num[1])
#         elif operator == "-":
#             result = float(num[0]) - float(num[1])
#         elif operator == "*":
#             result = float(num[0]) * float(num[1])
#         else:
#             result = float(num[0]) / float(num[1])
#         return result
#     else:
#         print("操作符有误!")
#         exit(11)



def multiply_divide(formula):
    '''
    乘除运算
    :param formula:
    :return:
    '''
    re_formula = re.findall("\d+\.*\d*[*/]\d+\.*\d*",formula)
    if re_formula:
        if re_formula[0].find("*") != -1:
            num = re_formula[0].split("*")
            result = float(num[0]) * float(num[1])
            return multiply_divide(formula.replace(re_formula[0],str(result)))
        else:
            num = re_formula[0].split("/")
            result = float(num[0]) / float(num[1])
            return multiply_divide(formula.replace(re_formula[0], str(result)))
    return plus_minus(formula)

if __name__ == '__main__':
    a = "12+32+93*23*(12/32*12)+(12*24/10+(12*23+20+(10*10/5)))*19*(1+2+3/2)*20*(1+2+3+(5*9+(10/12)))"
    print(reckon(a))

用re模块findall方法实现
使用re模块的findall方法

 

posted @ 2019-09-16 11:23  Mr-谢  阅读(233)  评论(0编辑  收藏  举报