需求:某公司有N个人,根据每个人的贡献不同,按贡献值给每个人赋予一个权重。设计一种算法实现公平的抽奖。
需求分析:按照权重对数据进行选择。
代码实现:
1 def fun(n,p): 2 """ 3 n 人的编号 4 p 每个人的权重 5 """ 6 my_dict = {} 7 my_sum = 0.0 8 for i in range(100): 9 my_dict[i] = [my_sum, my_sum + p[i]] 10 my_sum += p[i] 11 # 随机产生浮点数,表示中奖 12 bingo = random.random() 13 for j in range(100): 14 print(bingo, my_dict[j]) 15 if my_dict[j][0]< bingo < my_dict[j][1]: 16 return j 17 if __name__ == "__main__": 18 import random 19 n = [i for i in range(1,101)] 20 # 随机100 个浮点数 21 p1 = [random.random() for _ in range(100)] 22 print(len(p1)) 23 # 二次转换,保证和为1 排序,假设概率从小到大,与人一一对应 24 p2 = list(sorted([i/sum(p1) for i in p1 ])) 25 print("概率和:", sum(p2)) 26 print("抽中的是:", fun(n, p2), "号") ~
个人实现, 不知道对不对