大家好,我是煎蛋哥!
全国有很多彩民,其中购买最多的彩种分别是体彩大乐透和福彩双色球;虽然中大奖的概率极低,但是彩民纷至沓来,一方面抱着一份中奖的希望,另一方面想为公益事业贡献自己的一份薄力
煎蛋哥一直都有购买彩票的习惯,之前路过彩票店都会让店老板机选几注,这样选号自定义没那么方便,而且没法实现连续购买的需求
本篇文章将介绍 Python 实现彩票自由的全流程
1. 随机一注
体彩大乐透一注包含 7 个数字,包含 5 个红球和 2 个篮球
其中
红球是从 1 - 35 中选择 5 个不同的数字 蓝球是从 1 - 12 中选择 2 个不同的数字使用 Python 随机生成一注号码部分代码如下:
def?gene_dlt(number): ????""" ????随机多注大乐透 ????:param?number: ????:return: ????""" ????result?=?[] ????for?index?in?range(number): ????????#?产生5个红球 ????????red?=?random.sample([i?for?i?in?range(1,?36)],?5) ????????#?产生2个蓝球 ????????blue?=?random.sample([i?for?i?in?range(1,?13)],?2) ????????#?排序 ????????red.sort() ????????blue.sort() ????????#?数据处理 ????????red?=?nums_pre(red) ????????blue?=?nums_pre(blue) ????????result.append('?'.join(red)?+?"?+?"?+?'?'.join(blue)) ????return?'\n'.join(result)
def?nums_pre(nums): ????""" ????购买数字预处理,如果是个位数,加上0 ????:param?nums: ????:return: ????""" ????if?nums: ????????if?isinstance(nums,?list)?or?isinstance(nums,tuple): ????????????return?['0{}'.format(int(item))?if?int(item)?<?10?else?str(int(item))?for?item?in?nums] ????????else: ????????????return?'0{}'.format(int(nums))?if?int(nums)?<?10?else?str(int(nums)) ????else: ????????return?''
2. 红球固定或蓝球固定
很多彩民认为中奖号码没有规律,因此会选择根据自己的幸运数字,组成一注号码进行固定购买
红球固定
红球固定的情况下,我们只需要随机生成蓝球,然后进行排序、数据预处理,最后组成一注号码即可
def?gene_blue_random_dlt(red,?number): ????""" ????红球固定,篮球随机 ????:param?red:红球 ????:param?number:随机注数 ????:return: ????""" ????result?=?[] ????for?index?in?range(number): ????????#?产生2个蓝球 ????????blue?=?random.sample([i?for?i?in?range(1,?13)],?2) ????????#?排序 ????????red.sort() ????????blue.sort() ????????#?数据处理 ????????red?=?nums_pre(red) ????????blue?=?nums_pre(blue) ????????result.append('?'.join(red)?+?"?+?"?+?'?'.join(blue)) ????return?'\n'.join(result)
蓝球固定
蓝球固定时,我们只需要从 1-35 中随机生成 5 个不同的数字即可
def?gene_red_random_dlt(blue,?number): ????""" ????5个红球随机,2个篮球固定 ????:param?blue:蓝球列表 ????:param?number:随机注数 ????:return: ????""" ????result?=?[] ????for?index?in?range(number): ????????#?产生5个红球 ????????red?=?random.sample([i?for?i?in?range(1,?36)],?5) ????????#?排序 ????????red.sort() ????????blue.sort() ????????#?数据处理 ????????red?=?nums_pre(red) ????????blue?=?nums_pre(blue) ????????result.append('?'.join(red)?+?"?+?"?+?'?'.join(blue)) ????return?'\n'.join(result)
3. 爬取中奖号码
体彩大乐透开奖时间一般是晚上 9 点到 10 点之间,煎蛋哥建议选择晚上 10 点半进行爬虫,保证爬取数据的稳定准确性
目标地址:
aHR0cHM6Ly9rYWlqaWFuZy41MDAuY29tL3N0YXRpYy9pbmZvL2thaWppYW5nL3htbC9kbHQvbGlzdC54bWw=
该网站通过 XML 数据展示了每一期大乐透的中奖号码,我们只需要使用正则表达式匹配出所有中奖号码,取最近的一期号码即可
import?re import?requests class?DLT(object): ????def?__init__(self): ????????#?自行去转码获取(公众号:煎蛋搞钱) ????????self.url?=?'**' ????????self.headers?=?{ ????????????'User-Agent':?'Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_11_2)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/71.0.3578.98?Safari/537.36' ????????} ????def?get_last_dlt_lucky(self): ????????#?发起请求 ????????reponse?=?requests.get(url=self.url,?headers=self.headers) ????????#?正则规则 ????????pattern?=?re测试数据pile(r'<row.*?expect="(.*?)".*?opencode="(.*?)".*?opentime="(.*?)"') ????????#?大乐透数据 ????????dlt_raw_list?=?pattern.findall(reponse.text) ????????results?=?[] ????????for?item?in?dlt_raw_list: ????????????#?期数、数据、时间 ????????????no,?info,?create_at?=?item ????????????#?5个红球、2个篮球 ????????????red,?blue?=?info.split("|") ????????????red_datas?=?red.split(",") ????????????blue_datas?=?blue.split(",") ????????????results.append( ????????????????[no,?red_datas[0],?red_datas[1],?red_datas[2],?red_datas[3],?red_datas[4],?blue_datas[0],?blue_datas[1], ?????????????????create_at] ????????????) ????????#?最近的一期中奖号码 ????????last_lottery?=?results[0] ????????return?[last_lottery[1],?last_lottery[2],?last_lottery[3],?last_lottery[4],?last_lottery[5]],????????????????[last_lottery[6],?last_lottery[7]]
4. 是否中奖
有了购买号码、中奖号码,我们查看体彩大乐透官网中奖规则,根据红球中奖个数、蓝球中奖个数返回中奖信息即可
实现代码如下:
... def?judge_dlt_lucky(red_nums_result,?red_nums_buy,?blue_nums_result,?blue_nums_buy): ????""" ????根据中奖号码及购买号码,返回对应的中奖信息 ????:param?red_nums_result: ????:param?red_nums_buy: ????:param?blue_num_result: ????:param?blue_num_buy: ????:return: ????""" ????#?红球预测的数目 ????red_lucky_count?=?0 ????#?篮球预测的数目 ????blue_lucky_count?=?0 ????#?数据预处理 ????red_nums_buy?=?nums_pre(red_nums_buy) ????blue_nums_buy?=?nums_pre(blue_nums_buy) ????#?判断红球 ????for?red_result_item?in?red_nums_result: ????????for?red_buy_item?in?red_nums_buy: ????????????if?red_result_item?==?red_buy_item: ????????????????red_lucky_count?+=?1 ????#?判断蓝球 ????for?blue_result_item?in?blue_nums_result: ????????for?blue_buy_item?in?blue_nums_buy: ????????????if?blue_result_item?==?blue_buy_item: ????????????????blue_lucky_count?+=?1 ????#?大乐透中奖规则 ????if?red_lucky_count?==?5?and?blue_lucky_count?==?2: ????????luck_level?=?1??#?一等奖(5+2) ????elif?red_lucky_count?==?5?and?blue_lucky_count?==?1: ????????luck_level?=?2??#?二等奖(5+1) ????elif?red_lucky_count?==?5?and?blue_lucky_count?==?0: ????????luck_level?=?3??#?三等奖(5+0) ????elif?red_lucky_count?==?4?and?blue_lucky_count?==?2: ????????luck_level?=?4??#?四等奖(4+2) ????elif?red_lucky_count?==?4?and?blue_lucky_count?==?1: ????????luck_level?=?5??#?五等奖(4+1) ????elif?red_lucky_count?==?3?and?blue_lucky_count?==?2: ????????luck_level?=?6??#?六等奖(3+2) ????elif?red_lucky_count?==?4?and?blue_lucky_count?==?0: ????????luck_level?=?7??#?七等奖(4+0) ????elif?red_lucky_count?==?3?and?blue_lucky_count?==?1: ????????luck_level?=?8??#?八等奖(3+1) ????elif?red_lucky_count?==?2?and?blue_lucky_count?==?2: ????????luck_level?=?8??#?八等奖(2+2) ????elif?red_lucky_count?==?3?and?blue_lucky_count?==?0: ????????luck_level?=?9??#?九等奖(3+0) ????elif?red_lucky_count?==?2?and?blue_lucky_count?==?1: ????????luck_level?=?9??#?九等奖(2+1) ????elif?red_lucky_count?==?1?and?blue_lucky_count?==?2: ????????luck_level?=?9??#?九等奖(1+2) ????elif?red_lucky_count?==?0?and?blue_lucky_count?==?2: ????????luck_level?=?9??#?九等奖(0+2) ????else: ????????luck_level?=?-1 ????return?get_lucky_desc(luck_level),luck_level
5. 总结一下
通过上面的几个步骤,我们实现了选号、爬取中奖号码、判断是否中奖等功能
关于如何将选择的号码发送给站点老板,大家可以通过企业微信、UI 自动化、PC Hook 等方式来完成
以上就是Python实现大乐透号码随机生成的详细内容,更多关于Python大乐透号码的资料请关注其它相关文章!
查看更多关于Python实现大乐透号码随机生成的详细内容...