zoukankan      html  css  js  c++  java
  • 用函数写一个计算器(亲测完整版)

    第一个函数算乘除法:

    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))

    以上代码测试过,能够正常使用,如发现异常,请留言,一起学习进步!

  • 相关阅读:
    如何测得存储空间大小
    打印阿斯科码 和 打印字符
    正常血压
    c语言知识(1)
    子组件和父组件
    RESTful风格API
    django APIview使用
    django 基础
    npm install异常error code EPERM
    springsecurity 多httpsecurity配置
  • 原文地址:https://www.cnblogs.com/apollo1616/p/9519677.html
Copyright © 2011-2022 走看看