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