Python實現(xiàn)大樂透號碼隨機生成
大家好,我是煎蛋哥!
全國有很多彩民,其中購買最多的彩種分別是體彩大樂透和福彩雙色球;雖然中大獎的概率極低,但是彩民紛至沓來,一方面抱著一份中獎的希望,另一方面想為公益事業(yè)貢獻自己的一份薄力
煎蛋哥一直都有購買彩票的習慣,之前路過彩票店都會讓店老板機選幾注,這樣選號自定義沒那么方便,而且沒法實現(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ù)預處理,將小于 10 的數(shù)字前面加上 0
def?nums_pre(nums):
????"""
????購買數(shù)字預處理,如果是個位數(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ù)預處理,最后組成一注號碼即可
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)定準確性
目標地址:
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ù)中獎號碼及購買號碼,返回對應的中獎信息 ????:param?red_nums_result: ????:param?red_nums_buy: ????:param?blue_num_result: ????:param?blue_num_buy: ????:return: ????""" ????#?紅球預測的數(shù)目 ????red_lucky_count?=?0 ????#?籃球預測的數(shù)目 ????blue_lucky_count?=?0 ????#?數(shù)據(jù)預處理 ????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)了選號、爬取中獎號碼、判斷是否中獎等功能
關于如何將選擇的號碼發(fā)送給站點老板,大家可以通過企業(yè)微信、UI 自動化、PC Hook 等方式來完成
以上就是Python實現(xiàn)大樂透號碼隨機生成的詳細內(nèi)容,更多關于Python大樂透號碼的資料請關注腳本之家其它相關文章!
相關文章
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)作為一種輕量級標記語言,因其易寫易讀,效果美觀大方,不僅被眾多網(wǎng)站使用,也是程序員們做筆記、寫文檔的首選。本文將利用Python實現(xiàn)Excel轉(zhuǎn)Markdown表格,感興趣的可以了解一下2022-04-04
python內(nèi)置函數(shù)之slice案例詳解
這篇文章主要介紹了python內(nèi)置函數(shù)之slice案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-09-09
Python+Selenium使用Page Object實現(xiàn)頁面自動化測試
這篇文章主要介紹了Python+Selenium使用Page Object實現(xiàn)頁面自動化測試,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07

