[Python小项目] 利用Python进行彩票选择方案及分析

news2024/12/28 19:19:28

利用Python进行彩票选择方案及分析

一、前言

你是否曾梦想过一夜暴富?是否曾想过如果能幸运地中得大奖,生活会有怎样的改变?彩票,这个看似简单的游戏,却可能为我们带来巨大的财富。然而,如何选择号码,如何分析彩票,却是一门学问。在这篇文章中,我们将使用Python探讨彩票的选择方案及分析,帮助你更好地掌握彩票游戏的诀窍,离梦想更近一步。
彩票选择方案及分析在彩票游戏中具有举足轻重的地位。正确地选择号码,可以增加中奖的概率,而错误的选择则可能导致与大奖无缘。
我们首先需要理性对待彩票,将其作为一种娱乐方式,而不是寄希望于它来解决财务问题。
我们需要通过分析历史开奖数据来了解号码的出现规律和趋势。这一过程可以帮助我们判断哪些号码在当前较为热门,哪些号码较为冷门。
彩票选择方案及分析是一项需要长期学习和实践的技能。通过掌握科学的方法和技巧,我们可以提高中奖概率,从而离梦想更近一步。
在选择彩票号码时,我们需要从不同的角度进行分析。
首先,对于历史开奖数据的分析是十分关键的。通过观察历史数据,我们可以了解哪些号码在过去的开奖中出现的频率较高,哪些号码较为冷门。一般来说,热码的出现概率要高于冷码,因此在选择号码时可以适度偏向热码。同时,我们还要注意观察连号、同尾号等特殊形态的出现频率,这些也可以作为选号的参考因素。
其次,概率学知识在彩票选择中也具有重要的作用。利用概率计算方法,我们可以对不同的选号方案进行概率评估,从而选择出最优的方案。

二、分析代码

2.1 获取历史数据

建立Caipiao类,并通过指定的彩票网站下载历史数据,经过简单的数据整理并做好数据持久化工作。如下:

class Caipiao:
    def __init__(self, kaiguan=False):
        """
        获取并更新所需要的数据,组合成字典。存放在"ssq_data.pik"文件中。其中:
            key                                                 value
        dabao_shuju             列表形式,第1个元素包含原始数据,第2个元素包含号码,第3个元素包含匹配结果
        suoyou_yuanshi_shuju    所有的原始数据
        suoyou_qianqu_haoma     所有的前区号码
        suoyou_houqu_haoma      所有的后区号码
        suoyou_haoma            所有的号码
        suoyou_qianqu_haoma_pipei   所有的前区号码匹配结果
        :param kaiguan: 是否更新的开关。True为更新。
        """
        self.ssq_qianqu_kexuan = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33']
        self.ssq_houqu_kexuan = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16']
        if kaiguan:
            # 处理并更新ssq
            ssq_data = {}
            url = r'https://e.17500.cn/getData/ssq.TXT'
            r = requests.get(url=url, proxies=vNetProxies)
            datas = str(r.text).split('\n')[:-1]
            suoyou_yuanshi_shuju = []
            suoyou_qianqu_haoma = []
            suoyou_houqu_haoma = []
            suoyou_haoma = []
            suoyou_qianqu_haoma_pipei = []
            dabao_shuju = []
            for i in datas:
                dabao_shuju_temp = []
                yuanshi_shuju_temp = i.split(' ')
                suoyou_yuanshi_shuju.append(yuanshi_shuju_temp)
                suoyou_qianqu_haoma_temp = yuanshi_shuju_temp[2:8]
                suoyou_qianqu_haoma.append(suoyou_qianqu_haoma_temp)
                suoyou_houqu_haoma_temp = yuanshi_shuju_temp[8]
                suoyou_houqu_haoma.append(suoyou_houqu_haoma_temp)
                suoyou_haoma_temp = yuanshi_shuju_temp[2:9]
                suoyou_haoma.append(suoyou_haoma_temp)
                suoyou_qianqu_haoma_pipei_temp = self.ssq_pipei(suoyou_qianqu_haoma_temp)
                suoyou_qianqu_haoma_pipei.append(suoyou_qianqu_haoma_pipei_temp)
                dabao_shuju_temp.append(yuanshi_shuju_temp)
                dabao_shuju_temp.append(suoyou_haoma_temp)
                dabao_shuju_temp.append(suoyou_qianqu_haoma_pipei_temp)
                dabao_shuju.append(dabao_shuju_temp)
            ssq_data['dabao_shuju'] = dabao_shuju
            ssq_data['suoyou_yuanshi_shuju'] = suoyou_yuanshi_shuju
            ssq_data['suoyou_qianqu_haoma'] = suoyou_qianqu_haoma
            ssq_data['suoyou_houqu_haoma'] = suoyou_houqu_haoma
            ssq_data['suoyou_haoma'] = suoyou_haoma
            ssq_data['suoyou_qianqu_haoma_pipei'] = suoyou_qianqu_haoma_pipei
            with open('ssq_data.pik', 'wb') as f:
                pickle.dump(ssq_data, f)

2.2 判断中奖情况

在给定购买的号码和中奖的号码,判断此次双色球是否中奖,并中了几等奖。几等奖就返回数字几,如果未中奖则返回0。

@staticmethod
    def ssq_zhongjiang(buy, right):
        """
        在给定购买的号码和中奖的号码,判断此次双色球是否中奖,并中了几等奖。
        :param buy: 购买的号码
        :param right: 一等奖的号码
        :return: 几等奖就返回数字几,如果未中奖则返回0
        """

        if len(set(buy[:-1]) & set(right[:-1])) == 6 and buy[-1] == right[-1]:
            return 1  # 一等奖:7个球全中
        elif len(set(buy[:-1]) & set(right[:-1])) == 6:
            return 2  # 二等奖:6个红球全中
        elif len(set(buy[:-1]) & set(right[:-1])) == 5 and buy[-1] == right[-1]:
            return 3  # 三等奖:5个红球和1个蓝球(3000)
        elif (len(set(buy[:-1]) & set(right[:-1])) == 4 and buy[-1] == right[-1]) or len(set(buy[:-1]) & set(right[:-1])) == 5:
            return 4  # 四等奖:4个红球和1个蓝球 或者 5个红球(200)
        elif (len(set(buy[:-1]) & set(right[:-1])) == 3 and buy[-1] == right[-1]) or len(set(buy[:-1]) & set(right[:-1])) == 4:
            return 5  # 五等奖:3个红球和1个蓝球 或者 4个红球(10)
        elif (len(set(buy[:-1]) & set(right[:-1])) >= 1 and buy[-1] == right[-1]) or buy[-1] == right[-1]:
            return 6  # 六等奖:1-2个红球和1个蓝球 或者 1个蓝球(5)
        else:
            return 0  # 未中奖

三、方案分析

接下来是给定不同的方案,并通过大量数据模拟计算该方案的中奖率,以此来判断该方案的优劣。

3.1 方案一

首先,来看下纯机选的方案。也就是随机选择6个前区号码和1个后区号码。具体的分析方法如下:
1、每次在最近 500期 内随机选择一组作为目标中奖号码,共选择100次
2、机选号码 100万组 并和第1步选择到的目标中奖号码进行匹配中奖情况。
共模拟1亿次。
运行代码如下:

    def ssq_dashuju_01(self):
        """
        说明:
        1、每次在最近 500期 内随机选择一组作为目标中奖号码,共选择100次
        2、机选号码 100万组 并和第1步选择到的目标中奖号码进行匹配中奖情况。
        """
        with open('ssq_data.pik', 'rb') as f:
            suoyou_haoma = pickle.load(f)['suoyou_haoma']
        all_result = []
        start_num = 1
        count_num = 100
        step = 1
        for row in range(start_num, count_num * step + start_num, step):
            temp = random.randrange(-500, 0)  # 选中该期模拟运算(最近的500期)
            result = [0] * 7
            result[0] = row
            right = suoyou_haoma[temp]
            for cols in range(100_0000):
                buy = random.sample(self.ssq_qianqu_kexuan, 6) + random.sample(self.ssq_houqu_kexuan, 1)
                zhongjiang = self.ssq_zhongjiang(buy, right)
                if zhongjiang:
                    result[zhongjiang] = result[zhongjiang] + 1
                    # print(buy, right, zhongjiang)
            all_result.append(result)
        sheet = Handle_Workbook(file_name='caipiao_dashuju.xlsx', sheet_name='ssq01')
        sheet.write(all_result, write_position=[3, 1], issave=False)
        sheet.write([round(time.time() - begin, 0)], write_position=[118, 9])

结果如下:

总购买次数: 1亿
总中奖次数: 6710767
总中奖概率: 6.7108%
总金额: 2亿
1等奖次数及概率: 11:0.0000%
2等奖次数及概率: 76:0.0001%
3等奖次数及概率: 880:0.0009%
4等奖次数及概率: 43580:0.0436%
5等奖次数及概率: 775424:0.7754%
6等奖次数及概率: 5890796:5.8908%
本次耗时: 3005

3.2 方案二

第二个方案具体的分析方法如下:
1、每次在最近 500期 内随机选择一组作为目标中奖号码,共选择100次
2、在当期的前N期(N会变动)中奖号码之中随机一次性选择6个前区号码和1个后区,但选择好的号码必须符合最近400次的匹配结果。未匹配则舍弃。
匹配结果:每组号码,按照大小、奇偶、质合进行分析,可以得到该组号码的分析序列。比如:[‘10’, ‘11’, ‘12’, ‘13’, ‘26’, ‘28’, ‘11’]的匹配结果是:‘小小小小大大偶奇偶奇偶偶合质合质合合’
3、机选号码 100万组 并和第1步选择到的目标中奖号码进行匹配中奖情况。
共模拟1亿次。
运行代码如下:

    def ssq_dashuju_02(self):
        with open('ssq_data.pik', 'rb') as f:
            datas = pickle.load(f)
        suoyou_haoma = datas['suoyou_haoma']
        suoyou_qianqu_haoma_pipei = datas['suoyou_qianqu_haoma_pipei']
        suoyou_qianqu_haoma = datas['suoyou_qianqu_haoma']
        suoyou_houqu_haoma = datas['suoyou_houqu_haoma']
        self.ssq_qianqu_kexuan = []
        self.ssq_houqu_kexuan = []
        all_result = []
        start_num = 50
        count_num = 100
        step = 1
        for row in range(start_num, count_num * step + start_num, step):
            print((row - start_num) // step + 1)
            temp = random.randrange(-500, 0)  # 选中该期模拟运算(最近的500期)
            result = [0] * 7
            row_temp = int(row / 2)
            result[0] = row_temp
            right = suoyou_haoma[temp]  # 该期号码
            ssq_qianqu_kexuan_temp = suoyou_qianqu_haoma[temp - row_temp:temp]
            for item in ssq_qianqu_kexuan_temp:
                self.ssq_qianqu_kexuan.extend(item)
            ssq_houqu_kexuan_temp = suoyou_houqu_haoma[temp - row_temp:temp]
            self.ssq_houqu_kexuan.extend(ssq_houqu_kexuan_temp)
            for cols in range(10000):
                pipei = set(suoyou_qianqu_haoma_pipei[temp - 400:temp])
                chose_qianqu = []
                while len(set(chose_qianqu)) < 6 or self.ssq_pipei(chose_qianqu) not in pipei:
                    chose_qianqu = random.sample(self.ssq_qianqu_kexuan, 6)
                    chose_qianqu = sorted(chose_qianqu)
                chose_qianqu = list(chose_qianqu)
                chose_houqu = random.sample(self.ssq_houqu_kexuan, 1)
                buy = chose_qianqu + chose_houqu
                zhongjiang = self.ssq_zhongjiang(buy, right)
                if zhongjiang:
                    result[zhongjiang] = result[zhongjiang] + 1
                    # print(buy, right, zhongjiang)
            all_result.append(result)
        sheet = Handle_Workbook(file_name='caipiao_dashuju.xlsx', sheet_name='ssq06')
        sheet.write(all_result, write_position=[3, 1], issave=False)
        sheet.write([round(time.time() - begin, 0)], write_position=[118, 9])

结果如下:

总购买次数: 1亿
总中奖次数: 6984056
总中奖概率: 6.9841%
总金额: 2亿
1等奖概率: 6:0.0000%
2等奖概率: 95:0.0001%
3等奖概率: 1044:0.0010%
4等奖概率: 49666:0.0497%
5等奖概率: 851405:0.8514%
6等奖概率: 6081840:6.0818%
本次耗时: 16945

3.3 方案三

该方案和方案二类似,只不过在选择号码时,不是一次性选择6个前区号码,而是一个个的选择,全部选择后再进行匹配,匹配通过则进行模拟,否则舍弃。代码就不贴出来了。
结果如下:

总购买次数: 1亿
总中奖次数: 7097713
总中奖概率: 7.0977%
总金额: 2亿
1等奖概率: 8:0.0000%
2等奖概率: 78:0.0001%
3等奖概率: 995:0.0010%
4等奖概率: 45351:0.0454%
5等奖概率: 797147:0.7971%
6等奖概率: 6254134:6.2541%

四、最后总结

小编后面又思考了一些方案,并通过代码实现模拟运算,结果如下:
在这里插入图片描述

可以看到,方案3的中奖概率最高,方案2和方案9最稳定。但是,总的来说,不管选择哪种方案,这中奖率都是低的可怜,所以想通过彩票发家致富,是不太可能了。不过,日常生活中,偶尔购买个几注,调剂调剂生活还是可以的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Android】Intel HAXM installation failed!

Android Studio虚拟机配置出现Intel HAXM installation failed 如果方案一解决没有作用&#xff0c;就用方案二再试一遍 解决方案一&#xff1a; 1.打开控制面板 2.点击左侧下面最后一个程序 3.点击启用或关闭Windows功能 4.勾选Windows虚拟机监控程序平台 5.接下来重启电脑…

4.2 网际协议IP

思维导图&#xff1a; 前言&#xff1a; **笔记 4.2 - 网际协议IP** 1. **定义与重要性**&#xff1a; - 网际协议IP是TCP/IP体系中的核心协议之一。 - 它是互联网的关键标准协议。 2. **发展背景**&#xff1a; - 又被称为Kahn-Cerf协议。 - 由Robert Kahn和…

并发数计算方法

1、性能测试计算TPS 性能测试的TPS,大都是根据用户真实的业务数据(运营数据)来计算的 普通计算方式:TPS=总请求数/总时间 二八原则计算方法:TPS=总请求*0.8/总时间*0.2 (二八原则就是指80%的请求在20%的时间内完成) 总结:普通计算方式只能满足基本的要求,但是不能很好覆…

为什么使用C#开发软件的公司和程序员都很少?

为什么使用C#开发软件的公司和程序员都很少&#xff1f; 讲几个故事吧&#xff01;如果不爱听&#xff0c;就当个故事。 一个老东家做互联网的&#xff0c;java大概四五十人&#xff0c;四五十个前端&#xff0c;十个左右的c# &#xff0c;那年做点播机&#xff0c;招了两个嵌入…

常见的8个JMeter压测问题

为什么在JMeter中执行压力测试时&#xff0c;出现连接异常或连接重置错误&#xff1f; 答案&#xff1a;连接异常或连接重置错误通常是由于服务器在处理请求时出现问题引起的。这可能是由于服务器过载、网络故障或配置错误等原因导致的。 解决方法&#xff1a; 确定服务器的负载…

嵌入式软件行业真的没前途吗?

嵌入式软件行业真的没前途吗&#xff1f; 嵌入式对新人极不友好&#xff0c;前途是非常好的&#xff0c;问题是你光混日子等不到&#xff0c;没有靠谱的职业路径&#xff0c;你也学不成。最近很多小伙伴找我&#xff0c;说想要一些嵌入式资料&#xff0c;然后我根据自己从业十年…

广州股票开户怎么选择券商最好?炒股开户佣金最低是多少?

广州股票开户怎么选择券商最好&#xff1f;炒股开户佣金最低是多少&#xff1f; 开设股票账户通常需要以下步骤&#xff1a; 1.选择证券公司或经纪商。您可以通过互联网搜索或参考朋友的推荐&#xff0c;选择一家有信誉且服务良好的证券公司或经纪商。 2.填写开户申请表。您…

多用户多回路宿舍用电管理解决方案-安科瑞黄安南

01 引言 近几年来&#xff0c;因违规使用大功率恶性负载电器导致宿舍失火的安全事故在各大高校时有发生&#xff0c;给学生和学校都带来了巨大的损失。北京大学、哈尔滨工业大学、上海商学院以及俄罗斯人民友谊大学等高校学生公寓发生的火灾给高校学生公寓的安全用电敲响…

「深入探究Web页面生命周期:DOMContentLoaded、load、beforeunload和unload事件」

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 引言 1. DOMContentLoaded 1.1 属性 1.2 A…

3500/15 106M1079-01 支持先进和复杂的人工智能计算

3500/15 106M1079-01 支持先进和复杂的人工智能计算 耐能NPU IP系列允许ResNet、YOLO和其他深度学习网络在离线环境下的边缘设备上运行。耐能NPU IP为edge AI提供完整的硬件解决方案&#xff0c;包括硬件IP、编译器、模型压缩。它支持各种类型的卷积神经网络(CNN)模型&#xf…

去雨去雪去雾算法程序中断问题解决方法

中断问题 在进行去雨去雾去雪算法的实验过程中&#xff0c;时常会由于各种意外情况导致实验中断&#xff0c;而在该源码中&#xff0c;并没有对应的中断应对策略&#xff0c;这就导致该源码的健壮性太差&#xff0c;而且博主在实验时也确实遇到多次这种情况&#xff0c;这让博…

数据结构之手撕顺序表(讲解➕源代码)

0.引言 在本章之后&#xff0c;就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握&#xff0c;如果有小伙伴对上面相关的知识还不是很清晰&#xff0c;要先弄明白再过来接着学习哦&#xff01; 那进入正题&#xff0c;在讲解顺序表之前&#xff0c;我们先来介绍…

2.DApp-编写和运行solidity智能合约

题记 演示如何编写solidity智能合约&#xff0c;以及在remix中运行solidity代码。 准备Remix环境 在浏览器中搜索remix&#xff0c;找到remix官网&#xff0c;并打开 由于是国内网络&#xff0c;所以访问国外网站较慢&#xff0c;可以耐心等待加载完成&#xff0c;或者科学上网…

2023_Spark_实验十五:自定义法创建Dataframe及SQL操作

方式二&#xff1a;SQL方式操作 1.实例化SparkContext和SparkSession对象 2.创建case class Emp样例类&#xff0c;用于定义数据的结构信息 3.通过SparkContext对象读取文件&#xff0c;生成RDD[String] 4.将RDD[String]转换成RDD[Emp] 5.引入spark隐式转换函数&#xff08…

Linux入门攻坚——3、基础命令学习-文件管理、别名、glob、重定向、管道、用户及组管理、权限管理

文件管理&#xff1a;cp&#xff0c;mv&#xff0c;rm cp&#xff1a;复制命令&#xff0c;copy cp [OPTION]... [-T] SRC DEST cp [OPTION]... SRC... DIRECTORY cp [OPTION]... -t DIRECTORY DEST... 如果目标不存在&#xff0c;新建DEST&#xff0c;并将…

Motorola IPMC761 使用边缘TPU加速神经网络

Motorola IPMC761 使用边缘TPU加速神经网络 人工智能(AI)和机器学习(ML)正在塑造和推进复杂的自动化技术解决方案。将这些功能集成到硬件中&#xff0c;解决方案可以识别图像中的对象&#xff0c;分析和检测模式中的异常或找到关键短语。这些功能对于包括但不限于自动驾驶汽车…

易点易动设备管理平台:高效设备一站式管理助力企业成功

在现代企业运营中&#xff0c;设备管理是一个至关重要的任务。无论是生产设备、办公设备还是信息技术设备&#xff0c;高效的设备管理对于企业的生产效率和运营成本都具有重要影响。然而&#xff0c;传统的设备管理方式往往繁琐且容易出错&#xff0c;给企业带来了许多挑战。为…

为什么STM32的HAL库那么难用?

为什么STM32的HAL库那么难用&#xff1f; 在使用q banks和hell库时&#xff0c;开发速度简直快到让人觉得不可思议。最近我要开发一款三十八千赫兹红外应用。之前从未接触过这。最近很多小伙伴找我&#xff0c;说想要一些HAL库资料&#xff0c;然后我根据自己从业十年经验&…

如何使用本地PHP搭建本地Imagewheel云图床在公网远程访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

FPGA笔试

1、FPGA结构一般分为三部分&#xff1a;可编程逻辑块&#xff08;CLB&#xff09;、可编程I/O模块和可编程内部连线。 2 CPLD的内部连线为连续式布线互连结构&#xff0c;任意一对输入、输出端之间的延时是固定 &#xff1b;FPGA的内部连线为分段式布线互连结构&#xff0c;各…