不理解
发表在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编辑