已有183人关注
不理解
发表在Python图书答疑 2019-10-19 悬赏:1 学分 《零基础学Python》第5章 字符串及正则表达式 158页-158页
是否精华
版块置顶:
# decimal意思为十进制,这个模块提供了十进制浮点运算支持。
from decimal import Decimal
import random   # 提供了随机方法
print('------------模拟微信抢红包------------------')
total = input('请输入要装入红包的总金额(元):')
num = input('请输入红包的个数(个):')
min = 0.01               # 每个人最少能收到0.01元
money_list = []          # 创建红包列表
total = Decimal(total)   # 转换红包金额为十进制,方便后期计算
num = Decimal(num)       # 转换红包个数为十进制,方便后期计算
min = Decimal(str(min))  # 转换最小红包数为十进制,方便后期计算
if total > num * min:    
            # 根据红包个数进行循环,从1开始,所以随机出来的会少1个红包。
        for i in range(1,int(num)):
            # 根据循环到的红包个数,判断随机安全上限,不至于红包m没有每人最少0.01
            safe_total = (total - (num - i) * min) 
            # 随机出(获取红包金额)
            temp_min = min * 100                    # 随机的最小值
            temp_max = int(safe_total * 100)        # 随机的最大值
            money = temp_min / 100 if temp_min > temp_max else(Decimal(random.randint(temp_min,temp_max)))/100
            total -= money                 # 重置总金额,减去随机出的金额
            money_list.append(money)       # 保存最后一个元到红包数组,不足红包数量
        money_list.append(total)           # 随机打乱列表顺序
        random.shuffle(money_list)
        for x in range(len(money_list)):   # 输出结果
            print('第' + str(x + 1) + '个红包:' + str(money_list[x]) + '元')



其中

            temp_min = min * 100                    # 随机的最小值
            temp_max = int(safe_total * 100)        # 随机的最大值
            money = temp_min / 100 if temp_min > temp_max else(Decimal(random.randint(temp_min,temp_max)))/100

为什么要乘100了再除100?


这行代码是什么意思?

safe_total = (total - (num - i) * min)


为什么这个会是最大值?

temp_max = int(safe_total * 100)        # 随机的最大值



2019-10-19 12:30:39编辑
分享到:
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照