前段時間項目中開了一個轉盤抽獎的活動,轉盤抽獎是一個比較簡單的算法,下面介紹兩種實現
第一種實現
import random
from typing import List
def random_pick(item_list: List[str], probability_list: List[float]) -> str
"""
以設定的概率從列表里隨機抽取一個值返回
:param item_list: 元素列表
:param probability_list: 概率列表
:return: 抽取的元素
"""
if not all([item_list, probability_list]):
# 如果傳入空列表,返回提示信息
return "元素列表和概率列表不能為空!"
x = random.uniform(0, 1) # 產生隨機數
accumulative_probability = 0.0 # 累積概率
for item, probability in zip(item_list, probability_list):
accumulative_probability += probability
if x < accumulative_probability:
break
return item
### 第二種實現 ```python import random
def random_pick():
lucky_spin_rewards = [
{"integral": 1, "probability": 20},
{"integral": 2, "probability": 10},
{"integral": 3, "probability": 60},
{"integral": 4, "probability": 10},
]
integral = 0
x = random.randint(1, 100)
for item in lucky_spin_rewards:
probability = item["probability"]
if x <= probability:
integral = item["integral"]
break
x -= probability
return integral
以上兩種實現其實原理一樣,只是順序不一樣而已