lihuayuan 发表于 2017-9-17 19:13:15

好难
小白

_AnyWay 发表于 2017-9-18 18:00:34

学习

lLYPYTH 发表于 2017-10-13 13:24:03

aa

了解2号 发表于 2017-10-13 19:03:52

随机出来红包个数,然后随机分掉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:07:21

了解2号 发表于 2017-10-13 19:03
随机出来红包个数,然后随机分掉100元

好像稍微有点问题

自在猫 发表于 2017-10-13 20:36:55

本帖最后由 自在猫 于 2017-10-13 20:39 编辑

from random import randint

list1 =

list2 =

print(list2)

算出来的红包带小数

ybo2017 发表于 2017-11-8 14:10:21

好像题目要求每个红包数目不一样哦,各位,实现起来应该更加复杂吧

shigure_takimi 发表于 2017-12-2 01:49:03

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次,结果如下,还算公平。
>>>



















lxchace 发表于 2018-3-2 10:13:27

#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()

南城顾她 发表于 2018-3-2 14:13:45

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()

新手潘包邮 发表于 2018-4-24 23:50:06

solomonxian 发表于 2017-9-9 13:16
用正态分布吧,可能比较符合现实
标准差对应分散程度,按循环次数上取u-3σ>= 0下最大比较好,



大佬

学学看看 发表于 2018-8-2 19:18:13

小木子c 发表于 2018-8-4 19:00:22

#这样分红包相对平均,而且最后一个拿的人可能分得最大的红包
#感觉比较符合微信那个抢红包的机制


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
>>>

no7line 发表于 2018-8-21 16:55:25

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,有偏差的问题,不知道该怎么

咕咕鸡鸽鸽 发表于 2019-3-6 13:45:23

看看

小贤啊哦 发表于 2020-5-6 13:22:12

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
      

小陨aoq 发表于 2020-8-1 18:20:18

听说微信红包的算法是:每人拿到的钱数 = (剩余总钱数 / 剩余红包个数) * 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

z2x2c8 发表于 2020-8-2 02:36:46

看看答案

19971023 发表于 2020-8-9 15:18:48

1

aironeng 发表于 2020-12-8 09:03:50

学习
页: 1 2 [3] 4
查看完整版本: Python:每日一题 96(答题领鱼币)