Python實現(xiàn)雙色球號碼隨機(jī)生成
大家好,我是煎蛋哥!
上篇文章聊到了 Python 實現(xiàn)大樂透彩票自由的完整流程
和體彩大樂透類似,福彩雙色球也是購買次數(shù)最多的彩種之一,相比大樂透,雙色球更容易中小獎
下面將介紹 Python 實習(xí)雙色球彩票自由的流程
1. 隨機(jī)一注
福彩雙色球一注同樣包含 7 個數(shù)字,包含 6 個紅球和 1 個籃球
其中
- 紅球是從 1 - 33 中選擇 6 個不同的數(shù)字
- 藍(lán)球是從 1 - 16 中選擇 1 個不同的數(shù)字
使用 Python 隨機(jī)生成一注雙色球號碼,部分代碼如下:
def?gene_ssq(number): ????""" ????隨機(jī)產(chǎn)生幾注雙色球(6+1) ????:param?number: ????:return: ????""" ????result?=?[] ????for?item?in?range(number): ????????reds?=?[] ????????#?產(chǎn)生6個紅球 ????????while?len(reds)?<?6: ????????????#?從1-33中隨機(jī)取一個數(shù)字 ????????????temp_red_num?=?random.randint(1,?33) ????????????if?temp_red_num?not?in?reds: ????????????????reds.append(temp_red_num) ????????#?藍(lán)球 ????????blue?=?random.randint(1,?16) ????????#?紅球排序 ????????reds.sort() ????????#?數(shù)據(jù)預(yù)處理 ????????reds?=?nums_pre(reds) ????????blue?=?nums_pre([blue])[0] ????????result.append('?'.join(reds)?+?"?+?"?+?blue) ????return?'\n'.join(result)
需要注意的是,為了方便后面判斷是否中獎,這里對紅球列表進(jìn)行了一次數(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. 紅球固定或藍(lán)球固定
這里以紅球固定、藍(lán)球固定兩個最簡單的場景為例,其他復(fù)雜的場景可以自行拓展
紅球固定
紅球固定的情況下,我們只需要隨機(jī)生成一個藍(lán)球,然后進(jìn)行數(shù)據(jù)預(yù)處理,最后組成一注號碼即可
def?gene_blue_random_ssq(reds,?number): ????""" ????紅球固定,藍(lán)球隨機(jī) ????:param?reds: ????:param?number: ????:return: ????""" ????result?=?[] ????for?item?in?range(number): ????????#?藍(lán)球 ????????blue?=?random.randint(1,?16) ????????#?紅球排序 ????????reds.sort() ????????#?數(shù)據(jù)預(yù)處理 ????????reds?=?nums_pre(reds) ????????blue?=?nums_pre([blue])[0] ????????result.append('?'.join(reds)?+?"?+?"?+?blue) ????return?'\n'.join(result)
藍(lán)球固定
藍(lán)球固定時,我們只需要從 1-33 中隨機(jī)生成 6 個不同的數(shù)字組成紅球
def?gene_red_random_ssq(blue,?number): ????""" ????藍(lán)球固定,紅球隨機(jī) ????:param?blue: ????:param?number: ????:return: ????""" ????result?=?[] ????for?item?in?range(number): ????????reds?=?[] ????????#?產(chǎn)生6個紅球 ????????while?len(reds)?<?6: ????????????#?從1-33中隨機(jī)取一個數(shù)字 ????????????temp_red_num?=?random.randint(1,?33) ????????????if?temp_red_num?not?in?reds: ????????????????reds.append(temp_red_num) ????????#?紅球排序 ????????reds.sort() ????????#?數(shù)據(jù)預(yù)處理 ????????reds?=?nums_pre(reds) ????????blue?=?nums_pre([blue])[0] ????????result.append('?'.join(reds)?+?"?+?"?+?blue) ????return?'\n'.join(result)
3. 爬取中獎號碼
相比體彩大樂透,雙色球的開獎時間會稍微一些,煎蛋哥建議選擇晚上 10 點半進(jìn)行爬蟲
目標(biāo)地址:
aHR0cDovL2thaWppYW5nLjUwMC5jb20vc3RhdGljL2luZm8va2FpamlhbmcveG1sL3NzcS9saXN0LnhtbA==
該網(wǎng)站通過 XML 數(shù)據(jù)展示了過去每一期雙色球的中獎號碼,我們只需要使用正則表達(dá)式匹配出所有中獎號碼,取最近的一期號碼即可
import?re import?requests class?SSQ(object): ????def?__init__(self): ????????#?具體的地址請解碼后自行替換 ????????self.url?=?'**/xml/ssq/list.xml' ????????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_ssq_lucky(self): ????????#?發(fā)起請求 ????????reponse?=?requests.get(url=self.url,?headers=self.headers) ????????#?正則規(guī)則 ????????pattern?=?re.compile(r'<row.*?expect="(.*?)".*?opencode="(.*?)".*?opentime="(.*?)"') ????????#?雙色球數(shù)據(jù) ????????ssq_raw_list?=?pattern.findall(reponse.text) ????????results?=?[] ????????for?item?in?ssq_raw_list: ????????????#?期數(shù)、數(shù)據(jù)、時間 ????????????no,?info,?create_at?=?item ????????????#?6個紅球、1個籃球 ????????????red,?blue?=?info.split("|") ????????????red_datas?=?red.split(",") ????????????results.append( ????????????????[no,?red_datas[0],?red_datas[1],?red_datas[2],?red_datas[3],?red_datas[4],?red_datas[5],?blue, ?????????????????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. 是否中獎
根據(jù)雙色球官網(wǎng)提供中獎規(guī)則,我們根據(jù)紅球中獎個數(shù)、藍(lán)球中獎個數(shù)組成中獎信息即可
實現(xiàn)代碼如下:
... def?judge_ssq_lucky(red_nums_result,?red_nums_buy,?blue_num_result,?blue_num_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_num_buy?=?nums_pre(blue_num_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)球 ????if?blue_num_result?==?blue_num_buy: ????????blue_lucky_count?=?1 ????#?據(jù)福彩雙色球的中獎規(guī)則所寫,包括了所有的紅藍(lán)組合以及相對應(yīng)的中獎情況 ????if?red_lucky_count?==?6?and?blue_lucky_count?==?1: ????????luck_level?=?1??#?一等獎(6+1) ????elif?red_lucky_count?==?6?and?blue_lucky_count?==?0: ????????luck_level?=?2??#?二等獎(6+0) ????elif?red_lucky_count?==?5?and?blue_lucky_count?==?1: ????????luck_level?=?3??#?三等獎(5+1) ????elif?red_lucky_count?==?5?and?blue_lucky_count?==?0: ????????luck_level?=?4??#?四等獎(5+0) ????elif?red_lucky_count?==?4?and?blue_lucky_count?==?1: ????????luck_level?=?4??#?四等獎(4+1) ????elif?red_lucky_count?==?4?and?blue_lucky_count?==?0: ????????luck_level?=?5??#?五等獎(4+0) ????elif?red_lucky_count?==?3?and?blue_lucky_count?==?1: ????????luck_level?=?5??#?五等獎(3+1) ????elif?red_lucky_count?==?0?and?blue_lucky_count?==?1: ????????luck_level?=?6??#?六等獎(0+1) ????elif?red_lucky_count?==?1?and?blue_lucky_count?==?1: ????????luck_level?=?6??#?六等獎(1+1) ????elif?red_lucky_count?==?2?and?blue_lucky_count?==?1: ????????luck_level?=?6??#?六等獎(2+1) ????else: ????????luck_level?=?-1 ????return?__get_lucky_desc(luck_level),luck_level
5. 總結(jié)一下
通過上面的幾個步驟,我們實現(xiàn)了福彩雙色球的選號、爬取中獎號碼、判斷是否中獎等功能,彩票完全自動化還有部分內(nèi)容,在后面文章我們再細(xì)聊
相比體彩大樂透,福彩雙色球雖然獎項配置少一點,但是在尾部獎項上更容易中??;彩票作為一項公益事業(yè),建議大家抱著做公益、娛樂的性質(zhì)理性購買
到此這篇關(guān)于Python實現(xiàn)雙色球號碼隨機(jī)生成的文章就介紹到這了,更多相關(guān)Python雙色球號碼生成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)的線性回歸算法示例【附csv文件下載】
這篇文章主要介紹了Python實現(xiàn)的線性回歸算法,涉及Python使用最小二乘法、梯度下降算法實現(xiàn)線性回歸相關(guān)算法操作與使用技巧,需要的朋友可以參考下2018-12-12Python使用pandas和xlsxwriter讀寫xlsx文件的方法示例
今天小編就為大家分享一篇關(guān)于Python使用pandas和xlsxwriter讀寫xlsx文件的方法示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04Python3 SSH遠(yuǎn)程連接服務(wù)器的方法示例
這篇文章主要介紹了Python3 SSH遠(yuǎn)程連接服務(wù)器的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12解決pytorch下只打印tensor的數(shù)值不打印出device等信息的問題
這篇文章主要介紹了解決pytorch下只打印tensor的數(shù)值不打印出device等信息的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05