需求:某公司有N个人,根据每个人的贡献不同,按贡献值给每个人赋予一个权重。设计一种算法实现公平的抽奖。
需求分析:按照权重对数据进行选择。
代码实现:
1 def fun(n,p):2 """3 n 人的编号4 p 每个人的权重5 """6 my_dict = {}7 my_sum = 0.08 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 j17 if __name__ == "__main__":18 import random19 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), "号") ~
个人实现, 不知道对不对