需求:制作一个概率想等的发红包的程序
分析:红包总额money,拆分成n个红包
要点:
1.避免小数误差,可以换算成分求解
2.需要总额等于money,需要概率一样,取n-1个点,加上0和money两端,共n+1个点,组成n个线段,每个线段就是每个红包金额
3.返回生成器函数,领一个红包产生一个结果.
代码如下:
#设计共有money,发n个红包
def luckymoney(money,n):
import random
money = money*100#元换算成分,避免小数计算的误差
#随机取9个点
randlist=list(random.sample(range(1,money),n-1))
print(randlist)
randlist.sort()
#加上最小点0和最大点money
randlist.append(money)
randlist.insert(0,0)
print(randlist)
#n+1个点之间的n段就是每个红包的金额
sum=0
for i in range(n):
cash=(randlist[i+1]-randlist[i])
sum += cash
print("已发红包总额是:%s元" % (sum/100))
yield cash/100#结果全部从分换回元
num = 1
for cash in luckymoney(200,10):
print("第{}个红包是:{}元".format(num,cash))
num += 1
huibif的学习笔记