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 format_exp(exp):  #处理符号
        exp = exp.replace(' ', '') #处理空格
        exp = str(exp).replace('--', '+')
        exp = str(exp).replace('-+', '-')
        exp = str(exp).replace('+-', '-')
        exp = str(exp).replace('++', '+')
        return exp
    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 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 str(exp_sum)
    
    def main(exp):
        exp = exp.replace(' ', '') #删除空格
        while True:
            ret = re.search('([^()]*)', exp) #匹配括号
            if ret:
                inner_bracket = ret.group()
                # print(inner_bracket)
                res = cal(inner_bracket)  
                exp = exp.replace(inner_bracket, res) #替换
                exp = format_exp(exp)#处理符号
            else:
                break #没有括号跳出循环
        return cal(exp)
    # s = '1 + 2+(2*3)+(4/2*3+1)+1+(1+(2*3/6-(-1+1)))'
    # s = '1-2*((3+1)+1)'
    s = '1-(2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))))'
        # '-(-4*3)/(16-3*2))'
    # s = '1-2*3'
    ret3 = main(s)
    print(ret3)
    

      

    一个奋斗中的产品小白
  • 相关阅读:
    矿Mac必备软件
    PHP第六课 使用方法数组
    I/O概述和审查操作
    应用程序配置文件
    他毕业两年,博客一年,时间
    苹果公司的回复
    CImage类的介绍与使用
    数据库移植遇到的问题
    MP算法和OMP算法及其思想
    ROR 环境的 搭建
  • 原文地址:https://www.cnblogs.com/dabai123/p/11399980.html
Copyright © 2011-2022 走看看