|||
import random
total=200
n=15
x=[random.random() for i in range(n)]
e=[int(i/sum(x)*(total-n))+1 for i in x] #每人留一分,剩余随机分,用四舍五入可能会超过总数
re=total-sum(e)
u=[random.randint(0,n-1) for i in range(re)] #截断取整剩的零头再随机给各人1分
for i in range(re):
e[u[i]]+=1
print(e)
看了网上一些模拟分红包的算法,总觉得不那么"随机",有的算法是从总钱数中随机取,这样是条件概率,后面的红包会越来越少;为了保证每人都有份,有的算法遇到极端情况,明显不合理;有的算法写的太长,没利用好Python的简捷性。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-9 07:11
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社