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方法

相关文章:

  • 2021-10-24
  • 2022-12-23
  • 2022-02-08
  • 2021-08-10
  • 2021-10-14
  • 2021-10-28
  • 2022-12-23
  • 2021-06-10
猜你喜欢
  • 2022-01-28
  • 2022-12-23
  • 2021-11-27
  • 2021-11-14
  • 2022-12-23
  • 2021-07-25
  • 2021-06-26
相关资源
相似解决方案