诚意
诚意如你,当一诚的态度对待

导航

 

一:发红包

发红包数量,钱数

法一:

此方法的核心思想是先随机取,然后从剩下的随机取,取完之后在打乱。虽然这种方法能够达到我们的公平合理的目的,但有一个缺点就是容易出现较大的数

 1 import random
 2 def hb(sl,money):
 3     sum = 0
 4     li=[]
 5     for i in range(sl-1):   #此循环的目的是随机获得红包数量-1个随机数
 6         s= random.uniform(0,money-sum)
 7         sum += s
 8         li.append(s)
 9     if sum == money:    #此判断语句的目的是为了把最后剩余的钱放入列表
10         li.append(0)
11     else:
12         li.append(money-sum)
13     random.shuffle(li)  #打乱列表,这样变相实现公平的分红包
14     return li
15 
16 print(hb(4,10))     #第一个参数是红包数量,第二个参数是红包总钱数

法二:

此方法的核心是加入红包200元,分5个红包,那么把从0.....200形成的顺序列表中随机取出5个点,然后每个点之间的间隔是每个红包钱的大小

 1 import random
 2 def hongb(su,money):
 3     money = money*100       #不计算小数,扩大100倍,相当于把分算上了
 4     rs = random.sample(range(money),su) #随机从一个范围中如1...200中取数,这些数一定不会重复
 5     rs.sort()           #排序
 6     rs.insert(0,0)      #把0和末尾的数加进去
 7     rs.append(money)
 8     for i in range(len(rs)-1):      #每个点与点的分段才是前的大小
 9         yield (rs[i+1]-rs[i])/100
10 
11 p = hongb(4,100)
12 for money in p:
13     print(money)

法三:

此方法的核心:加入总共100元,分5个红包,那么每个红包都随机从100中取一个值,这样每个红包的相对于100来说都是公平的,然后把取到的值加在一起,算每一个红包占总前的比重,这个比重就是把100元分钱的比重,这样保证了绝对的公平

 1 import random
 2 def Bonus(person,money):  # 5,200
 3     dict_person_money = {}
 4     for i in range(person):
 5         num = random.randint(1,100)  # 99 99 99 99 99
 6         dict_person_money["Person%s"%(i+1)] = num  # person1:99
 7     num_sum = 0
 8     for i in dict_person_money:
 9         num_sum += dict_person_money[i]  # 5 * 99 = 495
10     for i in dict_person_money:    # 99/495 1/5 * 200 = 40
11         x =round(dict_person_money[i]/num_sum*money,2)
12         dict_person_money[i] = '$%s'%x
13     return dict_person_money
result = Bonus(10,1)
print(result)

法四:

这个方法的核心思想,是第一个红包从总钱的1/3中取,剩下的从剩下的1/3中取,这样保证了不会出现太大的数。但缺点还是有的,加入前面的取的都是较小的,那最后的那个就是最大的,这是这个方法的局限性

 1 import random
 2 def red_envelopes(money, numbers=10):
 3     name_list = ['s', 'd', '2', 'w', 'f',
 4                  'h', 'g', 'd', 'a', 'c']
 5     sum_n = 0
 6     balance = money
 7 
 8     for index, name in enumerate(name_list):
 9         random_money = random.uniform(0, balance / 3)
10         if index == numbers - 1:
11             print('%s grabbed %.2f element'
12                   % (name, money - sum_n))
13         else:
14             balance -= random_money
15             sum_n += random_money
16             print('%s grabbed %.2f element'
17                   % (name, random_money))
18 
19 money = int(input('please enter the amount of your red envelope!'))
20 red_envelopes(money)

 

posted on 2018-08-22 22:59  诚意  阅读(673)  评论(0)    收藏  举报