zoukankan      html  css  js  c++  java
  • 实现计算器

    实现能计算类似 
    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)
    

      

  • 相关阅读:
    开发基于键值对形式的语言管理器LauguageManager
    基于Json(键值对)配置文件的配置管理器
    Unity换装效果
    技能冷却效果的制作
    c#中的反射
    委托和事件的区别
    字典
    有序列表
    链表

  • 原文地址:https://www.cnblogs.com/seperinna/p/9844094.html
Copyright © 2011-2022 走看看