一、问题需求:
一个人在群里发了1个100元的红包,群里有5个人一起来抢红包,每人抢到的金额随机分配。
红包功能需要满足哪些具体规则呢?
1、所有人抢到的金额之和要等于红包金额,不能多也不能少。
2、每个人至少抢到1分钱。
3、要保证红包拆分的金额尽可能分布均衡,不要出现两极分化太严重的情况。
方法1:二倍均值法
假设剩余红包金额为m元,剩余人数为n,那么有如下公式:
每次抢到的金额=随机区间[0.01,m/n×2-0.01]元
这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。
import random
def redPackage(money,people):
'''
使用二倍均值法:抢红包
:param money: 总金额
:param people: 总人数
:return:
'''
#存入随机金额
ll=[]
#剩余金额
rest_money=money
#剩余人数
rest_people=people
#循环人数
for i in range(people-1):
#随机范围:[0.01,m/n×2-0.01]
amount=random.randint(1,int(rest_money/rest_people*2)-1)
#剩余金额=剩余金额-随机金额
rest_money-=amount
#剩余人数=剩余人数-1
rest_people-=1
#添加到列表中
ll.append(amount)
#将最后一个剩余金额添加到列表中
ll.append(rest_money)
# print(ll)
return ll
if __name__ == '__main__':
#100元5个人抢
ll=redPackage(10000,5)
# 1元2个人抢
# ll=redPackage(100,2)
for i in ll:
print(f'抢到:{i/100}元')