- import random
- def redMoney(total, div): # total=红包金额,div=份数, total应该大于等于div
- if total < div:
- print('无法分红包')
- return 0
- else:
- allRedMoney = [] # 存放每个红包的金额
- for i in range(div-1,0,-1):
- ## smallRed = random.randint(1, total-i)
- ## 小红包金额大于1块,并且要确保剩下的人至少能分到1块
- ## 此方法前面的人分的太多,后面的人基本只分到1块钱
- smallRed = random.randint(1, total-i)//2
- while smallRed == 0:
- smallRed = random.randint(1, total-i)//2
- total -= smallRed
- allRedMoney.append(smallRed)
- allRedMoney.append(total) # 最后一个人拿最后一份
- return allRedMoney
- for i in range(20):
- print(redMoney(100,10))
- ## 分20次,结果如下,还算公平。
- >>>
- [6, 28, 8, 3, 2, 2, 2, 10, 10, 29]
- [42, 25, 8, 6, 4, 5, 1, 1, 2, 6]
- [2, 11, 28, 7, 7, 18, 9, 2, 3, 13]
- [11, 38, 14, 11, 4, 4, 3, 2, 1, 12]
- [26, 2, 19, 3, 4, 17, 12, 5, 5, 7]
- [2, 32, 20, 7, 1, 14, 7, 5, 4, 8]
- [17, 15, 25, 2, 8, 7, 6, 2, 3, 15]
- [11, 12, 18, 1, 23, 10, 1, 8, 6, 10]
- [7, 21, 21, 21, 6, 2, 4, 5, 3, 10]
- [28, 15, 18, 12, 2, 7, 7, 4, 3, 4]
- [2, 36, 19, 11, 1, 13, 4, 5, 4, 5]
- [14, 6, 3, 26, 15, 9, 6, 3, 5, 13]
- [36, 27, 1, 4, 4, 10, 6, 5, 1, 6]
- [6, 9, 12, 29, 2, 13, 12, 3, 6, 8]
- [31, 20, 14, 7, 4, 4, 8, 5, 2, 5]
- [34, 7, 3, 18, 12, 7, 6, 4, 1, 8]
- [2, 29, 15, 1, 5, 14, 14, 2, 5, 13]
- [1, 16, 29, 22, 8, 1, 9, 6, 3, 5]
- [37, 26, 3, 12, 6, 4, 2, 3, 3, 4]
- [3, 42, 4, 3, 11, 12, 8, 5, 4, 8]
复制代码 |