• 计算器 随机红包


    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+", exp)
            if ret:
                chengchu = ret.group()  # 1*-22
                res = atom_cal(chengchu)
                exp = exp.replace(chengchu, res)
            else:return exp
    def func(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)
        s_um = 0
        for i in ret:
            s_um+=float(i)
        return s_um
    def main(exp):
        exp = mul_div(exp)
        exp = func(exp)
        print(exp)
        exp = add_sub(exp)
        print(exp)
    main('2-1*-22-3-4/-5')
    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 = exp.replace('+-','-')
        exp = exp.replace('-+','-')
        exp = 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 exp_sum   # float
    
    def main(exp):# 1
        exp = exp.replace(' ','')# 2去除空格
        while True:# 因为需要不断拿括号里的内容
            ret = re.search('([^()]+)', exp)# 匹配到最内层括号
            if ret :# 如果匹配到结果
                inner_bracket = ret.group()#拿到匹配内容
                res = str(cal(inner_bracket))#执行cal()函数  并且拿到计算加减的结果
                exp = exp.replace(inner_bracket, res)# 然后将计算的结果替换掉匹配掉以前得结果
                exp = format_exp(exp) # 处理加减号
            else:break # 匹配不到就结束
        return cal(exp)
    s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
    ret = main(s)
    print(ret, type(ret))
    

     

    随机红包 
    import random def red_packet(money,nub): money = money * 100 ret = random.sample(range(1, money), nub-1) ret.sort() ret.insert(0, 0) ret.append(money) print(ret) for i in range(len(ret)-1): yield (ret[i+1]-ret[i])/100 ret_g = red_packet(100,5) print(ret_g) for c in ret_g: print(c)

      

  • 相关阅读:
    CF D. Ehab and the Expected XOR Problem 贪心+位运算
    luogu 1903 [国家集训队]数颜色 / 维护队列 带修改莫队
    Test 1 T2 B 线段树合并
    CF812C Sagheer and Nubian Market 二分+贪心
    CF804B Minimum number of steps
    CF796D Police Stations BFS+染色
    CF796C Bank Hacking 细节
    k8s节点NotReady问题处理
    Elastic-Job快速入门
    Elastic-Job介绍
  • 原文地址:https://www.cnblogs.com/y122988/p/9520457.html
Copyright © 2020-2023  润新知