• 实现计算器


    实现能计算类似 
    1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式的计算器程序
    # -*- encoding:utf-8 -*-
    import re
    
    
    def dealwith(exp):
        exp = exp.replace("+-", '-')
        exp = exp.replace("--", '+')
        return exp
    
    
    def cal_exp_son(exp_son):
        if '/' in exp_son:
            a, b = exp_son.split('/')
            return str(float(a)/float(b))
        elif '*' in exp_son:
            a, b = exp_son.split('*')
            return str(float(a)*float(b))
    
    
    def cal_express_no_bracker(exp):
        exp = exp.strip("()")
        while True:
            ret = re.search('d+.?d*[*/]-?d+.?d*', exp)
            if ret:
                exp_son = ret.group()
                ret = cal_exp_son(exp_son)
                exp = exp.replace(exp_son,ret)
                exp = dealwith(exp)
            else:
                ret = re.findall('-?d+.?d*', exp)
                sum = 0
                for i in ret:
                    sum += float(i)
                return str(sum)
    
    
    def remove_bracket(new_express):
        """
        提取括号里没有其他括号的表达式
        :param new_express: 表达式字符串
        :return: 表达式计算的结果
        """
        while True:
            ret = re.search('([^()]+)', new_express)   # 查找最内层含有括号的
            if ret:
                express_no_bracker = ret.group()
                ret = cal_express_no_bracker(express_no_bracker)  # 计算括号里的结果
                exp = new_express.replace(express_no_bracker, ret)
                new_express = dealwith(exp)
            else:
                ret = cal_express_no_bracker(new_express)
                return ret
    
    
    express = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
    
    # 去空格
    new_express = express.replace(' ', '')
    result = remove_bracket(new_express)
    print(result)
    

      

  • 相关阅读:
    对生产稳定的一些思考
    tsar指标解释
    tsar采集nginx指标
    Nginx如何处理一个连接
    Java : 如何更优雅的设计异常
    MySql的索引实现
    IntelliJ Idea 常用配置
    ICSharpCode.SharpZipLib.dll 压缩、解压Zip文件 附源码
    Java BigDecimal使用
    社交系统中用户好友关系数据库设计
  • 原文地址:https://www.cnblogs.com/seperinna/p/9844094.html
Copyright © 2020-2023  润新知