好难
小白
学习
aa
随机出来红包个数,然后随机分掉100元
import random
money = 100
#num红包份数,随机的红包数量
num = random.randint(1,100)
while num:
get_money = random.randint(1,money)
money = money - get_money
print('%d'%get_money)
if money == 0:
break
num = num - 1
了解2号 发表于 2017-10-13 19:03
随机出来红包个数,然后随机分掉100元
好像稍微有点问题
本帖最后由 自在猫 于 2017-10-13 20:39 编辑
from random import randint
list1 =
list2 =
print(list2)
算出来的红包带小数
好像题目要求每个红包数目不一样哦,各位,实现起来应该更加复杂吧
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次,结果如下,还算公平。
>>>
#Red Envelope
import random
def RedEnv(money,number):
lucky_money = []
if number<=0 or money<number:
print("你的红包不够分啊~")
exit()
else:
for i in range(number):
lucky_money.append(1)
for i in range(money - number):
lucky_man = random.randint(0,number-1)
lucky_money += 1
return lucky_money
def main():
mon_num = eval(input("请输入红包钱和人数,逗号隔开:"))
lucky_money = RedEnv(*mon_num)
for i in range(1,mon_num+1):
print("第%d个人获得了%d元。"%(i,lucky_money))
return
if __name__ == "__main__":
main()
import random
def every_money(count, number, ago_money):
if number > 1:
money = random.randint(1, 10)
now_money = ago_money - money
print('第%s个人分到钱数为%s剩余%s' % (count, money, now_money))
count += 1
number -= 1
return every_money(count, number, now_money)
def main():
count = 1
every_money(count, 11, 100)
main()
solomonxian 发表于 2017-9-9 13:16
用正态分布吧,可能比较符合现实
标准差对应分散程度,按循环次数上取u-3σ>= 0下最大比较好,
大佬
#这样分红包相对平均,而且最后一个拿的人可能分得最大的红包
#感觉比较符合微信那个抢红包的机制
import random
a =
m,count= 100,0
while 1:
b = random.choice(a)
if b > m//3: #为平均,不会太大
continue
m -= b
count += 1
a =
print(b)
if count == 9:
print(m) #剩下的钱直接给最后一个人
break
31
5
12
8
3
6
8
1
1
25
>>>
15
18
9
1
10
3
3
3
9
29
>>>
import random
def fun4(qian,renshu):
b = []
c = []
for i in range(1,renshu+1):
b.append(random.randint(1, qian))
for i in b:
c.append(int(i / sum(b) * qian))
return (c)
f = input("请输入红包金额:")
qian = int(f)
g = input("请输入抢红包的人数:")
renshu= int(g)
h = fun4(qian,renshu)
print(h)
请输入红包金额:100
请输入抢红包的人数:10
但是这样会发生最后加起来不是100,有偏差的问题,不知道该怎么
看看
import random
count=1
num=10
N=100
while count<11:
money=r.randint(1,N-num+1)
print("第%d个红包有%d元"%(count,money))
N-=money
num-=1
count+=1
听说微信红包的算法是:每人拿到的钱数 = (剩余总钱数 / 剩余红包个数) * 2 * 0-1的随机数
def hongBao(amount, num):
for i in range(num):
if num == 1:
gain = amount
else:
gain = int((amount / num) * 2 * random.random() + 1)
print(gain)
amount -= gain
num -= 1
看看答案
1
学习