转盘指定概率抽奖

Posted zzliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转盘指定概率抽奖相关的知识,希望对你有一定的参考价值。

前段时间项目中开了一个转盘抽奖的活动,转盘抽奖是一个比较简单的算法,下面介绍两种实现

第一种实现

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


第二种实现

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

以上两种实现其实原理一样,只是顺序不一样而已


以上是关于转盘指定概率抽奖的主要内容,如果未能解决你的问题,请参考以下文章

PHP实现刮刮卡,大转盘抽奖概率,其实很简单!

PHP实现大转盘抽奖算法实例

Java中请问转盘的概率整么控制?角度这些(谢谢!)

中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法)

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法