第一个函数算乘除法:
import re def atom_cal(exp): if '*' in exp: a,b = exp.split('*') return str(float(a)*float(b)) elif '/' in exp: a,b = exp.split('/') return str(float(a)/float(b))
第二个函数 删选乘除法
def mul_div(exp): while True: ret = re.search('\d+(\.\d+)?[*/]-\d+(\.\d+)?',exp) if ret: atom_exp = ret.group() res = atom_cal(atom_exp) exp = exp.replace(atom_exp,res) else: return exp
第三个函数 格式化
def format_exp(exp): exp = exp.replace('--','+') exp = exp.replace('++','+') exp = exp.replace('+-','-') exp = exp.replace('-+','-') return exp
第四个函数 计算加减法
def add_sub(exp): ret = re.findall('[+-]?\d+(?:\.\d+)?',exp) exp_sum = 0 for i in ret: exp_sum += float(i) return exp_sum
第五个函数 计算函数
def cal(exp): exp = mul_div(exp) exp = format_exp(exp) exp_sum = add_sub(exp) return exp_sum
第六个函数 计算主函数
def main(exp): exp = exp.replace(' ','') while 1: ret = re.search('\([^()]+\)',exp) if ret: inner_bracket = res.group() res = str(cal(inner_bracket)) exp = exp.replace(inner_bracket,res) else:break return cal(exp) ret = main(s) print(ret,type(ret))
以上代码测试过,能够正常使用,如发现异常,请留言,一起学习进步!