昨天看到了一个需求:请你设计一个抽奖算法,随机抽出一位中奖用户,要求积分越高中奖概率越高。
需求分析:
1,随机抽一位中奖
2,积分越高中奖概率越大
由上两点可以设计如下:
import random
arr=[20, 34, 160,25,45,67,345,234]
#arr_jangci为将高积分增加了参与抽奖的次数的抽奖池对像
arr_jangci=[]
for i in arr:
ii=len(str(i))+1
#先取每个积分的长度,长度是多少就在奖池内增加多少个抽奖样本,这样就增加了中奖概率
for j in range(1,ii):
arr_jangci.append(i)
#查看重新组合过后的奖池数组
print(arr_jangci)
#在奖池里随机抽出一个对象作为中奖者
print(random.sample(arr_jangci,1))
运行出来的结果:
[20, 20, 34, 34, 160, 160, 160, 25, 25, 45, 45, 67, 67, 345, 345, 345, 234, 234, 234]
[345]
重新组合的抽奖池内,二位数的,增加到二次机会,三位数的,增加到三次机会,以此类推。最后的结果为随机抽奖出来的结果。