Python實(shí)現(xiàn)大樂(lè)透號(hào)碼隨機(jī)生成
大家好,我是煎蛋哥!
全國(guó)有很多彩民,其中購(gòu)買(mǎi)最多的彩種分別是體彩大樂(lè)透和福彩雙色球;雖然中大獎(jiǎng)的概率極低,但是彩民紛至沓來(lái),一方面抱著一份中獎(jiǎng)的希望,另一方面想為公益事業(yè)貢獻(xiàn)自己的一份薄力
煎蛋哥一直都有購(gòu)買(mǎi)彩票的習(xí)慣,之前路過(guò)彩票店都會(huì)讓店老板機(jī)選幾注,這樣選號(hào)自定義沒(méi)那么方便,而且沒(méi)法實(shí)現(xiàn)連續(xù)購(gòu)買(mǎi)的需求
本篇文章將介紹 Python 實(shí)現(xiàn)彩票自由的全流程
1. 隨機(jī)一注
體彩大樂(lè)透一注包含 7 個(gè)數(shù)字,包含 5 個(gè)紅球和 2 個(gè)籃球
其中
- 紅球是從 1 - 35 中選擇 5 個(gè)不同的數(shù)字
- 藍(lán)球是從 1 - 12 中選擇 2 個(gè)不同的數(shù)字
使用 Python 隨機(jī)生成一注號(hào)碼部分代碼如下:
def?gene_dlt(number): ????""" ????隨機(jī)多注大樂(lè)透 ????:param?number: ????:return: ????""" ????result?=?[] ????for?index?in?range(number): ????????#?產(chǎn)生5個(gè)紅球 ????????red?=?random.sample([i?for?i?in?range(1,?36)],?5) ????????#?產(chǎn)生2個(gè)藍(lán)球 ????????blue?=?random.sample([i?for?i?in?range(1,?13)],?2) ????????#?排序 ????????red.sort() ????????blue.sort() ????????#?數(shù)據(jù)處理 ????????red?=?nums_pre(red) ????????blue?=?nums_pre(blue) ????????result.append('?'.join(red)?+?"?+?"?+?'?'.join(blue)) ????return?'\n'.join(result)
需要注意的是,為了方便后面判斷是否中獎(jiǎng),這里進(jìn)行了一次數(shù)據(jù)預(yù)處理,將小于 10 的數(shù)字前面加上 0
def?nums_pre(nums): ????""" ????購(gòu)買(mǎi)數(shù)字預(yù)處理,如果是個(gè)位數(shù),加上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. 紅球固定或藍(lán)球固定
很多彩民認(rèn)為中獎(jiǎng)號(hào)碼沒(méi)有規(guī)律,因此會(huì)選擇根據(jù)自己的幸運(yùn)數(shù)字,組成一注號(hào)碼進(jìn)行固定購(gòu)買(mǎi)
紅球固定
紅球固定的情況下,我們只需要隨機(jī)生成藍(lán)球,然后進(jìn)行排序、數(shù)據(jù)預(yù)處理,最后組成一注號(hào)碼即可
def?gene_blue_random_dlt(red,?number): ????""" ????紅球固定,籃球隨機(jī) ????:param?red:紅球 ????:param?number:隨機(jī)注數(shù) ????:return: ????""" ????result?=?[] ????for?index?in?range(number): ????????#?產(chǎn)生2個(gè)藍(lán)球 ????????blue?=?random.sample([i?for?i?in?range(1,?13)],?2) ????????#?排序 ????????red.sort() ????????blue.sort() ????????#?數(shù)據(jù)處理 ????????red?=?nums_pre(red) ????????blue?=?nums_pre(blue) ????????result.append('?'.join(red)?+?"?+?"?+?'?'.join(blue)) ????return?'\n'.join(result)
藍(lán)球固定
藍(lán)球固定時(shí),我們只需要從 1-35 中隨機(jī)生成 5 個(gè)不同的數(shù)字即可
def?gene_red_random_dlt(blue,?number): ????""" ????5個(gè)紅球隨機(jī),2個(gè)籃球固定 ????:param?blue:藍(lán)球列表 ????:param?number:隨機(jī)注數(shù) ????:return: ????""" ????result?=?[] ????for?index?in?range(number): ????????#?產(chǎn)生5個(gè)紅球 ????????red?=?random.sample([i?for?i?in?range(1,?36)],?5) ????????#?排序 ????????red.sort() ????????blue.sort() ????????#?數(shù)據(jù)處理 ????????red?=?nums_pre(red) ????????blue?=?nums_pre(blue) ????????result.append('?'.join(red)?+?"?+?"?+?'?'.join(blue)) ????return?'\n'.join(result)
3. 爬取中獎(jiǎng)號(hào)碼
體彩大樂(lè)透開(kāi)獎(jiǎng)時(shí)間一般是晚上 9 點(diǎn)到 10 點(diǎn)之間,煎蛋哥建議選擇晚上 10 點(diǎn)半進(jìn)行爬蟲(chóng),保證爬取數(shù)據(jù)的穩(wěn)定準(zhǔn)確性
目標(biāo)地址:
aHR0cHM6Ly9rYWlqaWFuZy41MDAuY29tL3N0YXRpYy9pbmZvL2thaWppYW5nL3htbC9kbHQvbGlzdC54bWw=
該網(wǎng)站通過(guò) XML 數(shù)據(jù)展示了每一期大樂(lè)透的中獎(jiǎng)號(hào)碼,我們只需要使用正則表達(dá)式匹配出所有中獎(jiǎng)號(hào)碼,取最近的一期號(hào)碼即可
import?re import?requests class?DLT(object): ????def?__init__(self): ????????#?自行去轉(zhuǎn)碼獲?。ü娞?hào):煎蛋搞錢(qián)) ????????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): ????????#?發(fā)起請(qǐng)求 ????????reponse?=?requests.get(url=self.url,?headers=self.headers) ????????#?正則規(guī)則 ????????pattern?=?re.compile(r'<row.*?expect="(.*?)".*?opencode="(.*?)".*?opentime="(.*?)"') ????????#?大樂(lè)透數(shù)據(jù) ????????dlt_raw_list?=?pattern.findall(reponse.text) ????????results?=?[] ????????for?item?in?dlt_raw_list: ????????????#?期數(shù)、數(shù)據(jù)、時(shí)間 ????????????no,?info,?create_at?=?item ????????????#?5個(gè)紅球、2個(gè)籃球 ????????????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] ????????????) ????????#?最近的一期中獎(jiǎng)號(hào)碼 ????????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. 是否中獎(jiǎng)
有了購(gòu)買(mǎi)號(hào)碼、中獎(jiǎng)號(hào)碼,我們查看體彩大樂(lè)透官網(wǎng)中獎(jiǎng)規(guī)則,根據(jù)紅球中獎(jiǎng)個(gè)數(shù)、藍(lán)球中獎(jiǎng)個(gè)數(shù)返回中獎(jiǎng)信息即可
實(shí)現(xiàn)代碼如下:
... def?judge_dlt_lucky(red_nums_result,?red_nums_buy,?blue_nums_result,?blue_nums_buy): ????""" ????根據(jù)中獎(jiǎng)號(hào)碼及購(gòu)買(mǎi)號(hào)碼,返回對(duì)應(yīng)的中獎(jiǎng)信息 ????:param?red_nums_result: ????:param?red_nums_buy: ????:param?blue_num_result: ????:param?blue_num_buy: ????:return: ????""" ????#?紅球預(yù)測(cè)的數(shù)目 ????red_lucky_count?=?0 ????#?籃球預(yù)測(cè)的數(shù)目 ????blue_lucky_count?=?0 ????#?數(shù)據(jù)預(yù)處理 ????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 ????#?判斷藍(lán)球 ????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 ????#?大樂(lè)透中獎(jiǎng)規(guī)則 ????if?red_lucky_count?==?5?and?blue_lucky_count?==?2: ????????luck_level?=?1??#?一等獎(jiǎng)(5+2) ????elif?red_lucky_count?==?5?and?blue_lucky_count?==?1: ????????luck_level?=?2??#?二等獎(jiǎng)(5+1) ????elif?red_lucky_count?==?5?and?blue_lucky_count?==?0: ????????luck_level?=?3??#?三等獎(jiǎng)(5+0) ????elif?red_lucky_count?==?4?and?blue_lucky_count?==?2: ????????luck_level?=?4??#?四等獎(jiǎng)(4+2) ????elif?red_lucky_count?==?4?and?blue_lucky_count?==?1: ????????luck_level?=?5??#?五等獎(jiǎng)(4+1) ????elif?red_lucky_count?==?3?and?blue_lucky_count?==?2: ????????luck_level?=?6??#?六等獎(jiǎng)(3+2) ????elif?red_lucky_count?==?4?and?blue_lucky_count?==?0: ????????luck_level?=?7??#?七等獎(jiǎng)(4+0) ????elif?red_lucky_count?==?3?and?blue_lucky_count?==?1: ????????luck_level?=?8??#?八等獎(jiǎng)(3+1) ????elif?red_lucky_count?==?2?and?blue_lucky_count?==?2: ????????luck_level?=?8??#?八等獎(jiǎng)(2+2) ????elif?red_lucky_count?==?3?and?blue_lucky_count?==?0: ????????luck_level?=?9??#?九等獎(jiǎng)(3+0) ????elif?red_lucky_count?==?2?and?blue_lucky_count?==?1: ????????luck_level?=?9??#?九等獎(jiǎng)(2+1) ????elif?red_lucky_count?==?1?and?blue_lucky_count?==?2: ????????luck_level?=?9??#?九等獎(jiǎng)(1+2) ????elif?red_lucky_count?==?0?and?blue_lucky_count?==?2: ????????luck_level?=?9??#?九等獎(jiǎng)(0+2) ????else: ????????luck_level?=?-1 ????return?get_lucky_desc(luck_level),luck_level
5. 總結(jié)一下
通過(guò)上面的幾個(gè)步驟,我們實(shí)現(xiàn)了選號(hào)、爬取中獎(jiǎng)號(hào)碼、判斷是否中獎(jiǎng)等功能
關(guān)于如何將選擇的號(hào)碼發(fā)送給站點(diǎn)老板,大家可以通過(guò)企業(yè)微信、UI 自動(dòng)化、PC Hook 等方式來(lái)完成
以上就是Python實(shí)現(xiàn)大樂(lè)透號(hào)碼隨機(jī)生成的詳細(xì)內(nèi)容,更多關(guān)于Python大樂(lè)透號(hào)碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Django JSONField的自動(dòng)轉(zhuǎn)換思路詳解(django自定義模型字段)
如果想實(shí)現(xiàn)JSONField的自動(dòng)轉(zhuǎn)換,可以使用Django REST framework的JSONField,或者自定義一個(gè)字段類(lèi)并覆蓋from_db_value()和get_prep_value()方法來(lái)實(shí)現(xiàn)這個(gè)功能,這篇文章主要介紹了Django JSONField的自動(dòng)轉(zhuǎn)換(django自定義模型字段)問(wèn)題,需要的朋友可以參考下2023-06-06Python隨機(jī)生成身份證號(hào)碼及校驗(yàn)功能
這篇文章主要介紹了Python隨機(jī)生成身份證號(hào)碼及校驗(yàn)功能,文中給大家提到了校驗(yàn)碼計(jì)算方法,需要的朋友可以參考下2018-12-12使用python list 查找所有匹配元素的位置實(shí)例
今天小編就為大家分享一篇使用python list 查找所有匹配元素的位置實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06基于Python實(shí)現(xiàn)Excel轉(zhuǎn)Markdown表格
Markdown(也簡(jiǎn)稱(chēng)md)作為一種輕量級(jí)標(biāo)記語(yǔ)言,因其易寫(xiě)易讀,效果美觀(guān)大方,不僅被眾多網(wǎng)站使用,也是程序員們做筆記、寫(xiě)文檔的首選。本文將利用Python實(shí)現(xiàn)Excel轉(zhuǎn)Markdown表格,感興趣的可以了解一下2022-04-04python內(nèi)置函數(shù)之slice案例詳解
這篇文章主要介紹了python內(nèi)置函數(shù)之slice案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09Python基于回溯法子集樹(shù)模板解決選排問(wèn)題示例
這篇文章主要介紹了Python基于回溯法子集樹(shù)模板解決選排問(wèn)題,簡(jiǎn)單描述了選排問(wèn)題并結(jié)合實(shí)例形式分析了Python使用回溯法子集樹(shù)模板解決選排問(wèn)題的具體實(shí)現(xiàn)步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2017-09-09Python+Selenium使用Page Object實(shí)現(xiàn)頁(yè)面自動(dòng)化測(cè)試
這篇文章主要介紹了Python+Selenium使用Page Object實(shí)現(xiàn)頁(yè)面自動(dòng)化測(cè)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07