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