0
点赞
收藏
分享

微信扫一扫

python 练习题- 红包取值

题目:

1 红包算法
2 1.输入是人数,总金额。输出是每个人的金额
3

 

代码:

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

 



举报

相关推荐

python 练习题

python练习题

Python练习题

python 练习题-质数

Python列表练习题

【Python】函数练习题

python练习题(一)

0 条评论