需求:某公司有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), "號") ~
個人實現, 不知道對不對
