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

    import re
    def cal_mini_exp(mini):
        # '40/5'  '2*5'
        if '*' in mini:
            num1,num2 = mini.split('*')
            return str(float(num1)*float(num2))
        elif '/' in mini:
            num1, num2 = mini.split('/')
            return str(float(num1) / float(num2))
    
    def dealwith(exp):
        exp = exp.replace('--','+')
        exp = exp.replace('+-','-')
        exp = exp.replace('-+','-')
        exp = exp.replace('++','+')
        return exp
    
    def calculate(son_exp):
        '''
        计算没有括号的表达式的结果  (9-2*5/3+7/3*99/4*2998+10*568/14)
        '''
        son_exp = son_exp.strip('()')
        while True:  # '完成了一个表达式中所有乘除法的计算'
            ret = re.search('d+.?d*[*/]-?d+.?d*',son_exp)  #(9-3.33333+7/3*99/4*2998+10*568/14)
            if ret:
                mini_exp = ret.group()    #2*5 10/3
                res = cal_mini_exp(mini_exp)  # 2*5 3.33333
                son_exp = son_exp.replace(mini_exp,res,1)  #(9-3.33333+7/3*99/4*2998+10*568/14)
            else:break
        son_exp = dealwith(son_exp)   # 整理表达式中的符号
        ret_l = re.findall('[+-]?d+.?d*',son_exp)
        sum = 0
        for i in ret_l:
            sum += float(i)
        return str(sum)
    
    def remove_bracket(express):
        while True:
            ret = re.search('([^()]+)', express)  # 是否匹配上的对象
            if ret:
                son_exp = ret.group()  # 子表达式 (-40/5)
                # 计算 计算乘除法 再计算加减法
                ret = calculate(son_exp)  # -8
                express = express.replace(son_exp, ret, 1)
            else:
                break
        return express
    
    def main(express):
        express = express.replace(' ','')
        express = remove_bracket(express)
        ret = calculate(express)
        print(ret)
    
    if __name__ == '__main__':
        express = "-1 + 2 * ((60-30 +(-40/-5) * (9-2*-5/-3 + 7 /3*99/4*-2998 +10 * 568/14 *9/5)) - (-4*-3)/ (1-6-3*2) )"
    main(express)
    print(eval(express))
  • 相关阅读:
    VS2010、SQL Server 2008和SQL Server 2012安装详解
    IIS服务寄宿
    C#中错误:不包含适合于入 口点的静态“Main”方法 的解决方法
    硬件的一些性能指标
    SATA SAS SSD 硬盘介绍和评测
    mysql数据库锁定机制
    mysql日志设置优化
    MySQL硬件瓶颈分析
    可扩展性设计之数据切分
    硬件环境对系统性能的影响
  • 原文地址:https://www.cnblogs.com/wzbk/p/8530742.html
Copyright © 2011-2022 走看看