鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 96(答题领鱼币)

[复制链接]
发表于 2017-9-17 19:13:15 From FishC Mobile | 显示全部楼层
好难
小白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-18 18:00:34 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-13 13:24:03 | 显示全部楼层
aa
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-13 19:03:52 | 显示全部楼层
随机出来红包个数,然后随机分掉100元
  1. import random
  2. money = 100
  3. #num红包份数,随机的红包数量
  4. num = random.randint(1,100)
  5. while num:
  6.     get_money = random.randint(1,money)
  7.    
  8.     money = money - get_money
  9.     print('%d'%get_money)
  10.     if money == 0:
  11.         break
  12.     num = num - 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-13 19:07:21 | 显示全部楼层
了解2号 发表于 2017-10-13 19:03
随机出来红包个数,然后随机分掉100元

好像稍微有点问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-13 20:36:55 | 显示全部楼层
本帖最后由 自在猫 于 2017-10-13 20:39 编辑

from random import randint

list1 = [randint(1,100) for each in range(0,10)]

list2 = [each/sum(list1)*100 for each in list1]

print(list2)

算出来的红包带小数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-8 14:10:21 | 显示全部楼层
好像题目要求每个红包数目不一样哦,各位,实现起来应该更加复杂吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-2 01:49:03 | 显示全部楼层
  1. import random

  2. def redMoney(total, div): # total=红包金额,div=份数, total应该大于等于div
  3.     if total < div:
  4.         print('无法分红包')
  5.         return 0
  6.     else:
  7.         allRedMoney = [] # 存放每个红包的金额
  8.         for i in range(div-1,0,-1):
  9.             ## smallRed = random.randint(1, total-i)
  10.             ## 小红包金额大于1块,并且要确保剩下的人至少能分到1块
  11.             ## 此方法前面的人分的太多,后面的人基本只分到1块钱
  12.             smallRed = random.randint(1, total-i)//2
  13.             while smallRed == 0:
  14.                 smallRed = random.randint(1, total-i)//2
  15.             total -= smallRed
  16.             allRedMoney.append(smallRed)
  17.         allRedMoney.append(total) # 最后一个人拿最后一份

  18.     return allRedMoney


  19. for i in range(20):
  20.     print(redMoney(100,10))


  21. ## 分20次,结果如下,还算公平。
  22. >>>
  23. [6, 28, 8, 3, 2, 2, 2, 10, 10, 29]
  24. [42, 25, 8, 6, 4, 5, 1, 1, 2, 6]
  25. [2, 11, 28, 7, 7, 18, 9, 2, 3, 13]
  26. [11, 38, 14, 11, 4, 4, 3, 2, 1, 12]
  27. [26, 2, 19, 3, 4, 17, 12, 5, 5, 7]
  28. [2, 32, 20, 7, 1, 14, 7, 5, 4, 8]
  29. [17, 15, 25, 2, 8, 7, 6, 2, 3, 15]
  30. [11, 12, 18, 1, 23, 10, 1, 8, 6, 10]
  31. [7, 21, 21, 21, 6, 2, 4, 5, 3, 10]
  32. [28, 15, 18, 12, 2, 7, 7, 4, 3, 4]
  33. [2, 36, 19, 11, 1, 13, 4, 5, 4, 5]
  34. [14, 6, 3, 26, 15, 9, 6, 3, 5, 13]
  35. [36, 27, 1, 4, 4, 10, 6, 5, 1, 6]
  36. [6, 9, 12, 29, 2, 13, 12, 3, 6, 8]
  37. [31, 20, 14, 7, 4, 4, 8, 5, 2, 5]
  38. [34, 7, 3, 18, 12, 7, 6, 4, 1, 8]
  39. [2, 29, 15, 1, 5, 14, 14, 2, 5, 13]
  40. [1, 16, 29, 22, 8, 1, 9, 6, 3, 5]
  41. [37, 26, 3, 12, 6, 4, 2, 3, 3, 4]
  42. [3, 42, 4, 3, 11, 12, 8, 5, 4, 8]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[lucky_man] += 1
    return lucky_money

def main():
    mon_num = eval(input("请输入红包钱和人数,逗号隔开:"))
    lucky_money = RedEnv(*mon_num)
    for i in range(1,mon_num[1]+1):
        print("第%d个人获得了%d元。"%(i,lucky_money[i-1]))
    return

if __name__ == "__main__":
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 23:50:06 | 显示全部楼层
solomonxian 发表于 2017-9-9 13:16
用正态分布吧,可能比较符合现实
标准差对应分散程度,按循环次数上取u-3σ>= 0下最大比较好,

大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-8-2 19:18:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-4 19:00:22 | 显示全部楼层
  1. #这样分红包相对平均,而且最后一个拿的人可能分得最大的红包
  2. #感觉比较符合微信那个抢红包的机制


  3. import random

  4. a = [x for x in range(1,92)]
  5. m,count= 100,0
  6. while 1:
  7.     b = random.choice(a)
  8.     if b > m//3:         #为平均,不会太大
  9.         continue
  10.     m -= b
  11.     count += 1
  12.     a = [x for x in range(1,m-count+10)]
  13.     print(b)
  14.     if count == 9:
  15.         print(m)        #剩下的钱直接给最后一个人
  16.         break
复制代码

31
5
12
8
3
6
8
1
1
25
>>>
15
18
9
1
10
3
3
3
9
29
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
[7, 2, 13, 15, 12, 13, 14, 1, 1, 15]

但是这样会发生最后加起来不是100,有偏差的问题,不知道该怎么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-6 13:45:23 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-6 13:22:12 | 显示全部楼层
  1. import random
  2. count=1
  3. num=10
  4. N=100
  5. while count<11:
  6.     money=r.randint(1,N-num+1)
  7.     print("第%d个红包有%d元"%(count,money))
  8.     N-=money
  9.     num-=1
  10.     count+=1
  11.       
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-1 18:20:18 | 显示全部楼层
听说微信红包的算法是:每人拿到的钱数 = (剩余总钱数 / 剩余红包个数) * 2 * 0-1的随机数
  1. def hongBao(amount, num):
  2.     for i in range(num):
  3.         if num == 1:
  4.             gain = amount
  5.         else:
  6.             gain = int((amount / num) * 2 * random.random() + 1)
  7.         print(gain)
  8.         amount -= gain
  9.         num -= 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-2 02:36:46 | 显示全部楼层
看看答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-9 15:18:48 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-8 09:03:50 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 19:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表