Python - 彩票模拟器,模拟彩票的摇奖,并计算中奖概率,保本概率

文章目录

  • Python - 彩票模拟器,模拟彩票的摇奖,并计算中奖概率,保本概率
        • 1、代码
        • 2、运行结果
        • 3、玩法

Python - 彩票模拟器,模拟彩票的摇奖,并计算中奖概率,保本概率


1、代码

# 概率发生器
import random


# 配置
class Config:
    # 是否打印选配结果
    print_achievement = False
    # 测试轮次
    round_number = 100
    # 用户投注
    sale = 12

    # 玩法
    class PlayWay:
        # 开始数字
        start = 1
        # 结束数字
        end = 12
        # 玩法开出几个数字
        machine_choose = 5
        # 用户选择几个数字
        user_choose = 8
        # 最大赔率
        max_odds = 12.5
        # 平均赔率
        avg_odds = 12.5


# 生成随机票
def rg(q):
    u_list = []
    for i in range(q):
        ur = random.randint(Config.PlayWay.start, Config.PlayWay.end)
        if ur not in u_list:
            u_list.append(ur)
        else:
            while ur in u_list:
                ur = random.randint(Config.PlayWay.start, Config.PlayWay.end)
                if ur not in u_list:
                    u_list.append(ur)
                    break
    return u_list


if __name__ == '__main__':
    # 投赔率
    sale_odds_rate = Config.sale / Config.PlayWay.max_odds
    # 总注数
    count_sale = Config.round_number * Config.sale
    # 总成功次数
    count_success = 0
    for x in range(Config.round_number):
        if Config.print_achievement:
            print('-' * 15, 'round', x + 1, '-' * 15)
        m = rg(Config.PlayWay.machine_choose)
        if Config.print_achievement:
            print('machine', m)
        # 成功计次
        count = 0
        for j in range(Config.sale):
            u = rg(Config.PlayWay.user_choose)
            flag = False
            # 当玩法变化从少选到到复式时,包含方式相反
            if Config.PlayWay.machine_choose >= Config.PlayWay.user_choose:
                flag = set(u) <= set(m)
            else:
                flag = set(u) > set(m)
            if flag:
                if Config.print_achievement:
                    print('success', u)
                count += 1
            else:
                if Config.print_achievement:
                    print('fail', u)
        count_success += count
        if Config.print_achievement:
            print('success count', count)
    # 胜率
    print('success rate', format(count_success / count_sale * 100, '0.4f') + '%')
    # 保本率
    print('break even rate', format(count_success / count_sale * 100 * Config.PlayWay.max_odds, '0.4f') + '%')



2、运行结果

运行结果基本稳定在 4.5%-4.7% 左右

下面是运行12万注的结果

success rate 4.5083%
break even rate 56.3542%

3、玩法

可以根据不同的玩法设置不同的类型

如下是快乐彩12选5 任3的玩法配置

    # 玩法
    class PlayWay:
        # 开始数字
        start = 1
        # 结束数字
        end = 12
        # 玩法开出几个数字
        machine_choose = 5
        # 用户选择几个数字
        user_choose = 3
        # 最大赔率
        max_odds = 12.5
        # 平均赔率
        avg_odds = 12.5

本文地址:https://blog.csdn.net/qq_15071263/article/details/107323948

相关推荐:

如何在 Pandas 中按组等概率采样(非固定每组行数)

本文介绍一种灵活的Pandas分组采样策略:不强制每组抽取相同行数,而是使每个分组被选中的整体概率均等,适用于组大小差异大、且需保持组间采样公平性的场景。 本文介绍一种灵活的pandas分组采样策略:不强制每组抽取相同行数,而是使每个分组被选中的**整体概率均等**,适用于组大小差异大、且需保持组间...

如何在Pandas中按组等概率随机采样行(非固定每组行数)

本文介绍一种巧妙策略:先对每个分组均匀过采样,再全局随机抽取目标行数,从而实现各组被选中的概率近似相等,避免因组大小差异导致的偏差。 本文介绍一种巧妙策略:先对每个分组均匀过采样,再全局随机抽取目标行数,从而实现各组被选中的概率近似相等,避免因组大小差异导致的偏差。 在使用pandas.DataFr...

如何在Pandas中按组等概率随机采样(非固定每组行数)

本文介绍一种灵活的pandas分组采样策略:不强制每组抽取相同行数,而是使每个分组被选中的总体概率近似相等,适用于组大小差异大、且需保持组间采样公平性的场景。 本文介绍一种灵活的pandas分组采样策略:不强制每组抽取相同行数,而是使每个分组被选中的总体概率近似相等,适用于组大小差异大、且需保持组间...

Python怎么做马尔可夫链_转移概率矩阵计算与状态预测

用numpy手动计算转移概率矩阵:先用np.unique(seq,return_inverse=True)映射状态为整数索引,再用np.add.at()统计相邻对频次,最后行归一化。 怎么用numpy手动算转移概率矩阵 直接对状态序列做频次统计再归一化,比调包更可控,尤其当你需要处理缺失状态、自定义...

Python 多设备并行控制 Android(真机/模拟器)的高效实践方案

本文介绍如何使用python高效、稳定地并行控制多个android设备(包括模拟器与真机),重点推荐轻量级、原生adb驱动的androidviewclient/culebra方案,避免appium多服务端配置复杂、端口冲突等痛点,并提供可直接运行的多线程控制示例与关键注意事项。 本文介绍如何使用py...

CRC32 在 ASCII 字符串(长度 1–7)上的碰撞概率分析

本文系统分析了所有由可打印ascii字符(ascii32–126)构成、长度为1至7的字符串在crc32哈希下的理论碰撞概率,指出长度≤4时无碰撞,长度≥6时碰撞概率稳定趋近于$2^{-32}$,并给出长度5的精确解析结果($2^{-32.2184}$)。 本文系统分析了所有由可打印ascii字符(...