python 练习题- 红包取值

题目:

1 红包算法
2 1.输入是人数,总金额。输出是每个人的金额
3 2.多人红包,最大的不得超过总额的80%

 

代码:

 1 # @Author  :whyCai
 2 # @Time    :2021/3/4 22:15
 3 
 4 '''
 5 红包算法,输入是人数,总金额。输出是每个人的红包金额,拿的最多的人应有标示。
 6 额外要求:多人红包下,拿的最多的人,不得超过总额的80%.
 7 '''
 8 import random
 9 
10 def getRed(money,num,maxNum=0.8,min=0.01,switch=1):
11     '''
12     求随机数
13     :param money: 总金额
14     :param num: 人数
15     :param maxNum: 个人最大值的系数(总金额的百分比)
16     :param min: 最小值
17     :param switch: 1:随机数 第一个人获得大的金额数概率较大 其他:最大值按照 剩余金额/(剩余人数/2)的方式取值
18     :return: 
19     '''
20     money = round(float(money),2)
21     max = money * maxNum
22     num = int(num)
23     if num == 1:
24         print('总人数:{num},红包金额:{money}'.format(num=num,money=money))
25 
26     total = money
27     if num > 1:
28         for i in range(num):
29             if i != num-1:
30                 ranMax = int(max*100-(num-i-1)*min*100)
31                 if switch !=1:
32                     mid = 2 if num - i -1 < 2 else int((num - i - 1)/2)
33                     ranMax = round(ranMax/mid)
34                 ranRed = random.randint(min*100, ranMax)
35                 ranRedFloat = float(ranRed/100)
36                 total = round((total - ranRedFloat),2)
37                 if total < max:
38                     max = total
39             else:
40                 ranRedFloat = total
41                 total = 0
42             print('总人数:{num},第{n}个人的红包金额:{money},剩余红包金额:{moneyOther}'.format(num=num, n=i+1,money=ranRedFloat,moneyOther=total))
43 getRed(100,10,0.8,0.01,2)

 

posted @ 2021-03-08 08:47  菜小鱼~  阅读(169)  评论(0编辑  收藏  举报