练习:仿真模拟福彩双色球——中500w巨奖到底有多难?跑跑代码就晓得了。


Python 官网:https://www.python.org/



  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室

  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……



福彩双色球,中巨奖到底有多难?
仿真模拟双色球
试试 run 《仿真模拟双色球》代码就晓得了!




目 录
  • 1、最初构想
  • 2、更改构想
  • 3、完整代码运行效果
    • a. 最初效果
    • b. 初步优化效果
    • c. 最终效果
  • 4、仿真模拟类 SimulateDualColorBall 说明文档
    • a. “魔术方法”自主执行(init)——在这里设置模拟购买注数
    • b. 仿真模拟购票
    • c. 机选单注彩票
    • d. 单注号码展示
    • e. 单注模拟兑奖
    • f. 中得奖级累加
    • g. 完成模拟,输出本次中奖状况
  • 5、本练习完整源码(含所有用到的自制工具模块)

回目录

在这里插入图片描述

  看到这道题目,我生发用 python 循环语句来搞搞我以前喜欢的“双色球”,看看中500w巨奖到底有多难?🤩🤩
  都好久好久没碰“双色球”了,久到都不记得到底多久了。😝😝

搜搜“中奖规则”、“选号规则”(点击蓝色文字查看规则详情)了解了解先。


模拟构想

  双色球真实操作是彩民先买彩开奖前先截止购买,封存已成交彩票数据,再行机器摇出中奖号码,再由彩民持票兑奖。
  我的模拟,只好“反行其道”,先随机生成中奖号码(生成方式类似真实机器摇号,目的只验头等巨奖,固蓝号始终只摇一个),再以机选“双色球”号码的方式模拟出票,直到中得500w巨奖。过程中记录所出彩票总数,最后打印输出。正学习 python class ,因而代码用 python 类实现。


回目录


更改构建

  最初设想,仅中得500w大奖才完结程序。太难了,完结不了。得改“兑奖”操作。

def redeem_ticket(self, target):''' 兑奖 '''for i in target:if i not in self.target[:-1]:return # 遍历红球未中,返回空值 None 。if taget[-1] != self.target[-1]:return # 蓝球没中,返回空值 None 。return True

  修改号码存储结构,代码操作实现更便利。

[[00, 00, 00, 00, 00, 00], 00] -> [00, 00, 00, 00, 00, 00, 00]

  我想实现“双色球”全部六个奖项的统计。最终,得以代码实现:1、字典存储中得奖级。奖级为 key ,累加中奖次数。初始字典为空,用 dict.get(key, 0) ,获取奖级累积的值,设置 get 方法第二参数为 0 ,防止奖级字典中没 key 时报错,同时也解决了初始奖级为 0 的工作。

def write_lottery(self, flag):'''单注彩票中奖标识写入奖级存储字典。flag,中奖标识,str。 '''if flag == '61': # 特等奖,七球全中。key = 0elif flag == '60': # 二等奖,中六红球。key = 1elif flag == '51': # 三等奖, 中五红球+蓝球。key = 2elif flag == '50' or flag == '41': # 四等奖, 中五红球或者四红球+蓝球。key = 3elif flag == '40' or flag == '31': # 五等奖, 中四红球或者三红球+蓝球。key = 4elif flag == '01': # 六等奖,中蓝球。key = 5self.lottery[key] = self.lottery.get(key, 0) + 1 # 累加中奖奖级。

回目录


完整代码运行效果

在这里插入图片描述
最初效果


回目录


在这里插入图片描述

优化效果


回目录


在这里插入图片描述

模拟8000注
在这里插入图片描述

在这里插入图片描述

最终效果


回目录


SimulateDualColoredBall 文档


类实例调用


if __name__ == '__main__': # 直接执行本*.py文件,才执行后续语句。from mypythontools import inputnum # 载入自制工具:“数字输入”。while True:num = inputnum('请设置模拟买彩注数(n≥1)') # 调用数字输入工具,设置模拟双色球买票注数。if num < 1:continuebreak # num 大于等于 1。SimulateDualColoredBall(num) # 调用“双色球仿真模拟”,自动执行模拟。

回目录


1、“魔术方法”自主执行(init)

  调用“出票”方法取得一注随机号作为开奖号码,并调用“彩票展示”方法展示。打印最后输出界面“头部”信息。调用“买彩”方法,进行“双色球仿真模拟”。这一切都是一实例类 SimulateDual-coloredBall() 就自主执行的。

def __init__(self, num):''' 自动启动“魔术方法”,需要自动完成的事儿,都在这里。 num, 模拟买彩注数设置,int。target,开奖号码,list。lottery,中奖记录字典,dict。'''import time # 加载时间模块from python_color import color # 加载自制打印颜色控制输出工具。from mypythontools import localtime_show # 加载自制当前时间格式化字符串工具。self.color = color # 设置本 class 内部全局都能使用 color 。self.num = num # 模拟注数变量类内全局设置self.target = self.choice_ticket()        self.lottery = {} # 初始化中奖字典。start_sec = time.time() # 记录程序开始时间。print(f"\n\n{localtime_show().center(61, '=')}\n\n{'':>4}开奖号码:")self.show_ticket(self.target) # 调用彩票打印方法列印开奖号码。print() # 打印空行。self.buy_ticket() # 调用方法模拟买票。print(f" 用时 {self.color(f'{time.time()-start_sec:.2f}', 'f_green')} 秒。".center(55, '='))print('\n'*2) # 打印空行。

回目录


2、“双色球”仿真模拟——出票、兑奖、中得奖级记录

  用 for 循环进行“出票、示票、[兑奖(#redeem_ticket)]”、记录中得奖级操作,直到完成设置的彩票注数。

def buy_ticket(self):''' 循环模拟出票、兑奖,并统计中奖奖级,直到完成设定购买彩票数量。'''print(f"{'-'*50}\n\n\n{self.color(' 正在模拟“双色球” …… ', 'f_green').center(52)}\n\n")for n in range(1, self.num+1): # 模拟设定买票注数。ticket = self.choice_ticket() # 调用出票方法机选一注单注(6红+1蓝)。self.show_ticket(ticket) # 调用方法打印彩票号码。self.redeem_ticket(ticket) # 调用兑奖方法兑奖。self.show_lottery() # 调用方法打印中奖状况。

出票

def choice_ticket(self):'''摇号(出票),每次一组单注(6红+1蓝)red_ball, 红球预选号列表 01~33 , list。blue_ball, 蓝球预选号列表 01~16 , list。target,单注彩票号码列表, list。'''from random import choice, shuffle # 加载随机选择、随机洗牌方法。red_ball = list(range(1, 34))blue_ball = list(range(1, 17))target = [] # 初始单注彩票号码存储列表。for i in range(6): # 每次一个机选6个红球。shuffle(red_ball) # 随机“洗牌”备选红球。target.append(choice(red_ball))shuffle(blue_ball) # 随机“洗牌”备选蓝球。target.append(choice(blue_ball)) # 机选蓝球1。return target # 返回单注彩票号码列表(前6红,末尾蓝)。

单注彩票展示

def show_ticket(self, ticket):'''彩票号码列印ticket,单注彩票号码列表,list。'''        ticket_str = ' '.join([f"{i:02d}" for i in ticket]) # 格式化彩票号码字符串(每个号码占两个字位符,相邻间1半角空格,也就是英文空格。)print(f"{self.color(ticket_str[:-3], 'f_red')} {self.color(ticket_str[-2:], 'f_blue')}".center(68), end='\r') # 加色回车不换行打印号码字符串,'\r' 。

回目录


兑奖

def redeem_ticket(self, target):'''兑奖red, blue 红蓝球中奖数量,int。flag 单注彩票中奖标识,str。'''red, blue = 0, 0for i in target[:-1]: # 红球兑奖。if i in self.target[:-1]:red += 1 # 记录红球中奖个数。if target[-1] == self.target[-1]: # 蓝球兑奖。blue += 1flag = ''.join([str(red), str(blue)])if flag in ('61', '60', '50', '41', '40', '31', '01'): # 中奖标识在中奖标识列表中,记录中奖奖级。self.write_lottery(flag) # 调用方法写入奖级。

打印模拟中奖状况

  打印本次仿真模拟双色球中奖情况:各奖级获奖个数。最后加入了低等奖(除特等奖、二等奖外)总金额统计输出。

sum_money = (3000*self.lottery.get(2, 0)+ 200*self.lottery.get(3, 0)+ 10*self.lottery.get(4, 0)+ 5*self.lottery.get(5, 0))if sum_money <= 10000:sum_money_str = ' 低等奖(除特等奖、二等奖外)奖金总额 ' + self.color(f"¥{sum_money}", 'f_green') + ' 元'else:sum_money_str = ' 低等奖(除特等奖、二等奖外)奖金总额 ' + self.color(f"¥{sum_money/10000:.2f}w", 'f_green') + ' 元'print(f"{sum_money_str.center(40, '~')}\n\n") # 打印本次仿真模拟中得低等奖奖金总额。

“模拟中奖情况打印”完整代码

def show_lottery(self):'''打印中奖状况:从奖级字典读取并格式输出所有信息。(最后一行奖级字典整个输出,可选。勿需列印,在行首加“#”就好)'''from os import system # 加载机器操作系统命令容器。system('clear') # linux 清屏。if self.num > 10000:num = f"{self.num/10000}w"else:num = str(self.num)print(f"\n\n{self.localtime_show().center(61, '=')}")print(f"\n\n{'':>6}模拟购买“双色球” {self.color(num, 'f_green')} 注,共中奖 {self.color(str(sum(self.lottery.values())), 'f_green')} 注。\n{self.color('~'*50, 'f_green')}\n\n")print(f"{'':>16}特等奖:{self.color(str(self.lottery.get(0, 0)), 'f_red'):>15} 注")print(f"{'':>16}二等奖:{self.color(str(self.lottery.get(1, 0)), 'f_yellow'):>15} 注")print(f"{'':>16}三等奖:{self.color(str(self.lottery.get(2, 0)), 'f_green'):>15} 注")print(f"{'':>16}四等奖:{self.color(str(self.lottery.get(3, 0)), 'f_blue'):>15} 注")print(f"{'':>16}五等奖:{self.color(str(self.lottery.get(4, 0)), 'f_gray'):>15} 注")print(f"{'':>16}六等奖:{self.color(str(self.lottery.get(5, 0)), 'f_gray'):>15} 注\n\n")sum_money = (3000*self.lottery.get(2, 0)+ 200*self.lottery.get(3, 0)+ 10*self.lottery.get(4, 0)+ 5*self.lottery.get(5, 0))if sum_money <= 10000:sum_money_str = ' 低等奖(除特等奖、二等奖外)奖金总额 ' + self.color(f"¥{sum_money}", 'f_green') + ' 元'else:sum_money_str = ' 低等奖(除特等奖、二等奖外)奖金总额 ' + self.color(f"¥{sum_money/10000:.2f}w", 'f_green') + ' 元'print(f"{sum_money_str.center(40, '~')}\n\n") # 打印本次仿真模拟中得低等奖奖金总额。#print(f"{' 中奖奖级存储字典 '.center(42, '~')}\n{self.color(self.lottery, 'f_green').center(59)}\n\n") # 打印中奖级存储字典。

回首页


中奖规则:
  双色球中奖规则及奖金分别是:一等奖中奖规则为6+1全中,单注奖金最高限额封顶500万元。二等奖中奖规则为6+0,奖金总额为当期高等奖奖金的30%。三等奖中奖规则是5+1,单注奖金固定为3000元。四等奖中奖规则是5+0或者4+1,单注奖金固定为200元。


选号规则:
  双色球投注区分为红色球号码区和蓝色球号码区,红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。投注时选择6个红色球号码和1个蓝色球号码组成一注进行单式投注,每注金额人民币2元。
  购买者可选择胆拖投注。胆拖投注是指选择少于单式投注号码个数的号码作为每注都有的号码作为胆码,再选取除胆码以外的号码作为拖码,由胆码和拖码组合成多注投注。



练习源码

  本练习完整源码有些“篇幅”,不宜在此展示。已打包(连同用到的自制工具模块)上传在“我的资源”:https://download.csdn.net/download/m0_57158496/85738693


回首页


My Up and Down

__上一篇:__ 单词记忆系统一:菜单循环和菜单确认(Python 自定义类、自定义模块的相对路径import)

__下一篇:__ “语法糖”——我的编程新知

我的HOT博:

  • 练习:银行复利计算(用 for 循环解一道初中小题)(1043阅读)
  • pandas 数据类型之 DataFrame(1267阅读)
  • 班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)(2069阅读)
  • Python字符串居中显示(1416阅读)
  • 练习:求偶数和、阈值分割和求差( list 对象的两个基础小题)(1634阅读)
  • 用 pandas 解一道小题(1957阅读)
  • 可迭代对象和四个函数(1062阅读)
  • “快乐数”判断(1225阅读)
  • 罗马数字转换器(构造元素取模)(1923阅读)
  • Hot:罗马数字(转换器|罗生成器)(3453阅读)
  • Hot:让QQ群昵称色变的代码(25567阅读)
  • Hot:斐波那契数列(递归| for )(3981阅读)
  • 柱状图中最大矩形(1639阅读)
  • 排序数组元素的重复起止(1232阅读)
  • 电话拨号键盘字母组合(1338阅读)
  • 密码强度检测器(1785阅读)
  • 求列表平衡点(1806阅读)
  • Hot: 字符串统计(4227阅读)
  • Hot:尼姆游戏(聪明版首发)(3406阅读)尼姆游戏(优化版)(977阅读)
推荐条件 点阅破千

回目录


老齐漫画头像

精品文章:

  • 好文力荐:《python 完全自学教程》齐伟书稿免费连载
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


回目录

Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——寒佬(还是国内某高校学生)好文:《非技术文—关于英语和如何正确的提问》,“英语”和“会提问”是学习的两大利器。

  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛

  • 靠谱程序员的好习惯


CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将ChatGPT接入微信、QQ、钉钉等聊天应用 | 教程和源码分享

将 ChatGPT、必应、文心一言、谷歌Bard 等对话模型连接各类应用&#xff0c;如微信、公众号、QQ、Telegram、Gmail、Slack、Web、企业微信、飞书、钉钉等。 将 AI模型 接入各类 消息应用&#xff0c;开发者通过轻量配置即可在二者之间选择一条连线&#xff0c;运行起一个智能对…

神级插件Bito介绍及使用

还在用其他AI?不是说它不火了&#xff0c;而是你基本上很难访问了。这里介绍个便宜且免费的AI聊天插件&#xff0c;一样可以很棒。永久免费且不限制次数&#xff0c;有这好事&#xff1f;且听下文分解。 前言 虽然GPT 是用不了&#xff0c;推荐下国内的一些大模型&#xff0c…

2023爱分析·AIGC厂商全景报告|爱分析报告

关键发现 通用大模型市场当前虽入局者众多&#xff0c;但终局将高度集中&#xff0c;未来将由5-6家厂商主导&#xff1b;应用层厂商及甲方企业应着眼终局&#xff0c;从大算力、巨量数据集、端到端AI工程化能力以及应用生态伙伴等维度综合考虑&#xff0c;慎重选择合作伙伴。 …

分享5款办公效率工具|让你早点下班

如果每天你的工作都很多&#xff0c;做不完需要加班怎么办? 不知道你会不会加班&#xff0c;但是我肯定不会&#xff0c;因为我知道哪些高效率的办公工具&#xff0c;可以帮助我早点下班&#xff0c;今天来给大家分享一下。 1.FlowUs FlowUs 是一款为个人和团队打造的新一代生…

ROS学习笔记(二) 话题通信

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、话题通信的理论模型二、代码实现1.发布方2.订阅方实现 3.自定义msg的发布方和订阅方0.预先&#xff1a;1.代码部分2.依赖部分3.终端及效果(包含计算图)4.注…

作为唯一安全技术入选IEEE,机密计算为什么如此重要?

作者 | 蓝晏翔 邵乐希 出品 | IDEA研究院 大规模AI计算中的数据和模型安全 人工智能技术&#xff08;AI&#xff09;作为这个时代最具影响力的技术&#xff0c;渗透到了我们生活的方方面面。特别是2022年底&#xff0c;OpenAI发布的ChatGPT表现出了惊人的信息分析、整合、决策和…

国产AIGC大模型汇总

“ 随着ChatGPT和GPT-4的出现&#xff0c;直接引爆了全球的AIGC大模型市场&#xff01;为了赶上这一波热潮&#xff0c;国内的大厂和创业公司也纷纷内卷起来&#xff0c;相继发布了自己的大模型。但是到目前为止&#xff0c;没有一个大模型能与ChatGPT相提并论&#xff0c;更比…

chatgpt赋能python:利用Python进行SEO

利用Python进行SEO 随着互联网的发展&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;变得越来越重要。每个拥有网站的人都希望在搜索引擎结果中排名靠前。Python作为一种强大而流行的编程语言&#xff0c;可以帮助我们进行SEO优化。 Python与SEO的结合 Python可以用于…

chatgpt赋能python:Python人机对话程序:打造智能交互的未来

Python人机对话程序&#xff1a;打造智能交互的未来 随着人工智能技术的不断发展&#xff0c;人机对话程序&#xff08;Dialogue System&#xff09;也逐渐成为了研发人员关注和探索的重点。Python作为一门高效、简洁、易学易用的编程语言&#xff0c;成为了众多人机对话程序工…

ChatGPT是如何运行起来的?(下)

本文我们介绍ChatGPT是如何工作的&#xff0c;以及为什么它能够产生连贯和多样化的对话。分上中下篇为读者们呈现。 微信搜索关注《Java学研大本营》 9 嵌入 神经网络--至少在目前的设置中--从根本上说是基于数字的。因此&#xff0c;如果我们要用神经网络来处理像文本这样的东…

自动生成原创文案软件v.1.2.3

各大科技公司纷纷布局大模型领域&#xff0c;微软将向OpenAI进行价值数十亿美元的投资加速其在人工智能领域的技术突破。此外Buzzfeed和亚马逊亦在探索ChatGPT应用场景&#xff0c;正在逐步落地。国内方面&#xff0c;以华为、阿里、百度为代表的科技公司纷纷展开了AI大模型的研…

巴比特 | 元宇宙每日必读:4个月内签下1亿美元的生成式人工智能项目,埃森哲称Gen AI是很大的机会,现在还是早期...

摘要&#xff1a;据 LiveMint 6 月 25 日报道&#xff0c;埃森哲表示&#xff0c;在过去四个月中&#xff0c;该公司在生成式人工智能领域签下了价值 1 亿美元的项目。埃森哲主席兼首席执行官 Julie Sweet 表示&#xff0c;“Gen AI 是一个很大的机会&#xff0c;但现在还是早期…

零基础DIY四轴飞行器超级详细保姆级教程(STM32F407ZGT6主控、WIFI图传、陀螺仪平衡、气压计/超声波定高、手机蓝牙控制等功能)

前言 大四毕业后暑假没事做就花了一点DIY了一个四轴飞行器&#xff0c;是比较大的那种F450机架&#xff0c;不是那种PCB板做机架的小四轴&#xff0c;因为我也是从零基础开始做的四轴&#xff0c;现在就想把自己的过程写成博客分享在网上。下面我会从机械结构、主控和各传感器…

高性能流媒体硬解码

目录 高性能流媒体硬解码前言1. What、Why and How1.1 What1.2 Why&#xff1f;1.3 How&#xff1f; 2. 离散傅里叶变换(DFT)2.1 JPEG编码2.2 哈夫曼编码(Huffman Coding) 3. 视频流媒体前置知识3.1 视频文件的构成3.2 视频的编码与封装3.3 H264编码的分层3.4 RTSP之RTP(Real-t…

《云计算好用工具清单(2023版)》.pdf

其实&#xff0c;自工信部在2018年印发《推动企业上云实施指南&#xff08;2018-2020年&#xff09;》以来&#xff0c;国家政策就已经显示出不断支持与引导着我国云计算行业的发展的态势。 根据美国软件公司Flexera《2021年云计算市场发展状态报告》数据显示&#xff0c;36%的…

基于TCP交互的安卓chatGLM客户端

基于TCP交互的安卓chatGLM客户端 基本原理 随着chatGPT的火爆发展&#xff0c;如何将其快速实现部署和访问成为了急需解决的问题&#xff0c;为此&#xff0c;开发了一个基于TCP交互的安卓chatGLM客户端系统。 其中 后端在开源的 chatGLM-6B 的基础上&#xff0c;使用socket…

aardio + Python 可视化快速开发桌面程序,一键生成独立 EXE

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

chatgpt赋能python:Python手游:如何用Python技术构建一个优秀的手游?

Python手游&#xff1a;如何用Python技术构建一个优秀的手游&#xff1f; 在当今的数字时代&#xff0c;游戏已经成为一种最流行的娱乐方式之一。尤其是手游&#xff0c;在移动设备上已经占据了巨大市场份额。通过Python编程语言&#xff0c;我们可以使用其强大的功能来构建出…

chatgpt赋能python:Python拦截发包实现网络安全

Python拦截发包实现网络安全 网络安全是当前社会中一个非常重要的话题&#xff0c;无论是企业还是个人都需要采取有效措施保护自身隐私和数据安全。在网络安全中&#xff0c;拦截发包是一个非常有用的技术手段。本文将介绍如何利用Python实现拦截发包&#xff0c;从而实现网络…

AutoCV:Python基础总结

目录 Python基础总结前言Python基础课程总结第一课&#xff1a;开发环境和基本数据类型第二课&#xff1a;控制流程和函数第三课&#xff1a;闭包和根号2的求解第四课&#xff1a;类和三大神器第五课&#xff1a;文件IO和pickle、json第六课&#xff1a;作用域、模块和包、Data…