一:发红包
发红包数量,钱数
法一:
此方法的核心思想是先随机取,然后从剩下的随机取,取完之后在打乱。虽然这种方法能够达到我们的公平合理的目的,但有一个缺点就是容易出现较大的数
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)
浙公网安备 33010602011771号