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