<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何用 Python 買彩票

          共 16081字,需瀏覽 33分鐘

           ·

          2021-05-07 20:02

          作者:hhh_Moon_hhh  

          https://blog.csdn.net/m0_54218263/article/details/116001249


          一、需求介紹

          該需求主要是分析彩票的歷史數(shù)據(jù),彩票的名稱為:
          1、極速飛艇
          2、極速賽車
          客戶的需求是根據(jù)彩票的前兩期的情況,如果存在某個(gè)斜著的兩個(gè)數(shù)字相等,那么就買第三期的同一個(gè)位置處的彩票,
          對于極速飛艇,如果相等的數(shù)字是:1-5,那就買6-10,如果相等的數(shù)字是:6-10,那就買1-5;
          對于極速賽車,如果相等的數(shù)字是:1-5,那就買1-5,如果相等的數(shù)字是:6-10,,那就買6-10。

          然后,根據(jù)這個(gè)方案,有可能會買中,但是也有可能買不中,于是,客戶希望我可以統(tǒng)計(jì)出來在100天中,按照這種方法,連續(xù)6次以及6次以上的購買彩票才能夠命中一次獎(jiǎng)的次數(shù)以及分別所對應(yīng)的時(shí)間,對于這個(gè)案例,我們下面詳細(xì)分析。


          二、以極速飛艇為例進(jìn)行數(shù)據(jù)分析

          (在這里,我們先利用 Jupyter Notebook 來進(jìn)行分析,然后,在得到成果以后,利用 Pycharm 來進(jìn)行完整的程序設(shè)計(jì)。)
          1、獲取一天的數(shù)據(jù)
          打開如下圖所示的界面可以獲取到網(wǎng)址以及請求頭:
          ①、網(wǎng)址(歷史數(shù)據(jù)的網(wǎng)址)

          ②、請求頭



          然后我們在程序中進(jìn)行代碼書寫獲取數(shù)據(jù):

          然后進(jìn)行一定的預(yù)處理:

          2、開始一天的數(shù)據(jù)的分析
          這里我們直接展示代碼:
          def reverse_list(lst):    """    準(zhǔn)換列表的先后順序    :param lst: 原始列表    :return: 新的列表    """    return [ele for ele in reversed(lst)]   low_list = ["01", "02", "03", "04", "05"]# 設(shè)置比較小的數(shù)字的列表high_list = ["06", "07", "08", "09", "10"]# 設(shè)置比較大的數(shù)字的列表N = 0# 設(shè)置一個(gè)數(shù)字N來記錄一共有多少期可以購買n = 0# 設(shè)置一個(gè)數(shù)字n來記錄命中了多少期彩票record_number = 1  # 設(shè)置記錄數(shù)據(jù)的一個(gè)判斷值list_data_number = []# 設(shè)置一個(gè)空的列表來存儲一天之中的連續(xù)掛掉的期數(shù)dict_time_record = {}# 設(shè)置一個(gè)空的字典來存儲連掛掉的期數(shù)滿足所列條件的時(shí)間節(jié)點(diǎn)for k in range(1152):      # 循環(huán)遍歷所有的數(shù)據(jù)點(diǎn)    if k < 1150:        new_result1 = reverse_list(new_response["result"]["data"])[k]          # 第一期數(shù)據(jù)        new_result2 = reverse_list(new_response["result"]["data"])[k + 1]          # 第二期數(shù)據(jù)        new_result3 = reverse_list(new_response["result"]["data"])[k + 2]          # 第三期數(shù)據(jù)        data1 = new_result1['preDrawCode'].split(',')        # 第一期數(shù)據(jù)        data2 = new_result2['preDrawCode'].split(',')        # 第二期數(shù)據(jù)        data3 = new_result3['preDrawCode'].split(',')        # 第三期數(shù)據(jù)        for m in range(10):            # 通過循環(huán)來判斷是否滿足購買的條件,并且實(shí)現(xiàn)一定的功能            if m == 0:                if data2[0] == data1[1]:                      # 如果相等就要結(jié)束循環(huán)                    N += 1                    # 可以購買的期數(shù)應(yīng)該要自加一                    if (data2[0] in low_list and data3[0] in low_list) or (data2[0] in high_list and data3[0] in high_list):                        n += 1                        # 命中的期數(shù)應(yīng)該要自加一                        # 如果命中了的話,本輪結(jié)束,開啟下一輪                        list_data_number.append(record_number)                        if f"{record_number}" in dict_time_record.keys():                            # 如果已經(jīng)有了這個(gè)鍵,那么值添加時(shí)間點(diǎn)                            dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])                        else:                            # 如果沒有這個(gè)鍵,那么添加一個(gè)鍵值對,值為一個(gè)列表,而且初始化為當(dāng)前的時(shí)間                            dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]                        record_number = 1                          # 初始化下一輪的開始                    else:                        record_number += 1                          # 如果沒有命中的話,次數(shù)就應(yīng)該要自加一                    break                      # 如果滿足相等的條件就要結(jié)束循環(huán)            elif m == 9:                  # 與上面差不多的算法                if data2[9] == data1[8]:                      # 如果相等                    N += 1                    if (data2[9] in low_list and data3[9] in low_list) or (data2[9] in high_list and data3[9] in high_list):                        n += 1                        list_data_number.append(record_number)                        if f"{record_number}" in dict_time_record.keys():                            dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])                        else:                            dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]                        record_number = 1                    else:                        record_number += 1                    break            else:                  # 與上面差不多的算法                if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:                      # 如果相等                    N += 1                    if (data2[m] in low_list and data3[m] in low_list) or (data2[m] in high_list and data3[m] in high_list):                        n += 1                        list_data_number.append(record_number)                        if f"{record_number}" in dict_time_record.keys():                            dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])                        else:                            dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]                        record_number = 1                    else:                        record_number += 1                    breakprint(f"日期:{new_response['result']['data'][0]['preDrawTime'][:10]},總的梯子數(shù)為{N}個(gè),一共有{n}次命中,一共有{N - n}次掛了")# 打印時(shí)間,以及,可以購買的期數(shù),命中的期數(shù),沒有命中的期數(shù)list_data_number.sort()# 按照大小順序來進(jìn)行排序dict_record = {}# 設(shè)置空字典進(jìn)行記錄for i in list_data_number:    if f"{i}" in dict_record.keys():  # 判斷是否已經(jīng)有了這個(gè)數(shù)字?        dict_record[f"{i}"] += 1        # 如果有的話,那么就會自加一    else:  # 如果沒有的話,那么就會創(chuàng)建并且賦值等于 1        dict_record[f"{i}"] = 1        # 創(chuàng)建一個(gè)新的字典元素,然后進(jìn)行賦值為 1for j in dict_record.keys():    if (int(j) >= 6) and (int(j) < 15):        # 實(shí)際的結(jié)果表明,我們需要的是大于等于6期的數(shù)據(jù),而沒有出現(xiàn)大于15的數(shù)據(jù),因此有這樣的一個(gè)關(guān)系式        print(f"買{j}次才中獎(jiǎng)的次數(shù)為{dict_record[j]}")        # 打印相關(guān)信息        print(dict_time_record[j])        str0 = ""        for letter in dict_time_record[j]:            str0 += letter            str0 += ", "        print(str0)        # 打印相關(guān)信息

          運(yùn)行結(jié)果的展示如下圖所示:


          3、循環(huán)日期進(jìn)行多天的數(shù)據(jù)分析:
          首先設(shè)置一個(gè)事件列表來記錄需要統(tǒng)計(jì)哪些天的數(shù)據(jù):
          代碼:
          data_list = []for h in range(31):    data_list.append(f'1-{h + 1}')for h in range(28):    data_list.append(f'2-{h + 1}')for h in range(31):    data_list.append(f'3-{h + 1}')for h in range(20):    data_list.append(f'4-{h + 1}')
          通過上述的代碼,我們即實(shí)現(xiàn)了時(shí)間列表的設(shè)置,然后我們循環(huán)遍歷這個(gè)列表訪問不同日期的彩票數(shù)據(jù)即就是得到了不同時(shí)間的數(shù)據(jù),然后再利用上述的分析方法來進(jìn)行數(shù)據(jù)分析,即就是可以得到了多天的彩票數(shù)據(jù)分析的結(jié)果了。


          4、將數(shù)據(jù)寫入Excel表格中
          這里我們可以采用xlwt 模塊來進(jìn)行excel表格的寫入操作啦,具體的寫入就不必過多贅述了。

          三、完整的代碼展示

          以下是完整的代碼:
          import requestsimport chardetimport jsonimport xlwt  # excel 表格數(shù)據(jù)處理的對應(yīng)模塊  def reverse_list(lst):    """    準(zhǔn)換列表的先后順序    :param lst: 原始列表    :return: 新的列表    """    return [ele for ele in reversed(lst)]  data_list = []for h in range(31):    data_list.append(f'1-{h + 1}')for h in range(28):    data_list.append(f'2-{h + 1}')for h in range(31):    data_list.append(f'3-{h + 1}')for h in range(20):    data_list.append(f'4-{h + 1}')  wb = xlwt.Workbook()  # 創(chuàng)建 excel 表格sh = wb.add_sheet('彩票分析數(shù)據(jù)處理')  # 創(chuàng)建一個(gè) 表單sh.write(0, 0, "日期")sh.write(0, 1, "梯子數(shù)目")sh.write(0, 2, "命中數(shù)目")sh.write(0, 3, "掛的數(shù)目")sh.write(0, 4, "6次中的數(shù)目")sh.write(0, 5, "6次中的時(shí)間")sh.write(0, 6, "7次中的數(shù)目")sh.write(0, 7, "7次中的時(shí)間")sh.write(0, 8, "8次中的數(shù)目")sh.write(0, 9, "8次中的時(shí)間")sh.write(0, 10, "9次中的數(shù)目")sh.write(0, 11, "9次中的時(shí)間")sh.write(0, 12, "10次中的數(shù)目")sh.write(0, 13, "10次中的時(shí)間")sh.write(0, 14, "11次中的數(shù)目")sh.write(0, 15, "11次中的時(shí)間")sh.write(0, 16, "12次中的數(shù)目")sh.write(0, 17, "12次中的時(shí)間")sh.write(0, 18, "13次中的數(shù)目")sh.write(0, 19, "13次中的時(shí)間")sh.write(0, 20, "14次中的數(shù)目")sh.write(0, 21, "14次中的時(shí)間")# wb.save('test4.xls')  sheet_seek_position = 1# 設(shè)置表格的初始位置為 1for data in data_list:    low_list = ["01", "02", "03", "04", "05"]    high_list = ["06", "07", "08", "09", "10"]    N = 0    n = 0    url = f'https://api.api68.com/pks/getPksHistoryList.do?date=2021-{data}&lotCode=10037'    headers = {        'User-Agent':            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '            'AppleWebKit/537.36 (KHTML, like Gecko) '            'Chrome/90.0.4430.72 Safari/537.36'    }    response = requests.get(url=url, headers=headers)    response.encoding = chardet.detect(response.content)['encoding']    new_response = json.loads(response.text)    sh.write(sheet_seek_position, 0, new_response['result']['data'][0]['preDrawTime'][:10])    # 在表格的第一個(gè)位置處寫入時(shí)間,意即:data    record_number = 1  # 記錄數(shù)據(jù)的一個(gè)判斷值,設(shè)置為第一次,應(yīng)該是要放在最外面的啦    list_data_number = []    # 設(shè)置一個(gè)空列表來存儲一天之中的連續(xù)掛的期數(shù)    dict_time_record = {}    for k in range(1152):        # record_number = 1,應(yīng)該要放外面        # 記錄數(shù)據(jù)的一個(gè)判斷值,設(shè)置為第一次        if k < 1150:            new_result1 = reverse_list(new_response["result"]["data"])[k]            new_result2 = reverse_list(new_response["result"]["data"])[k + 1]            new_result3 = reverse_list(new_response["result"]["data"])[k + 2]            data1 = new_result1['preDrawCode'].split(',')            data2 = new_result2['preDrawCode'].split(',')            data3 = new_result3['preDrawCode'].split(',')            for m in range(10):                if m == 0:                    if data2[0] == data1[1]:                         N += 1                        if (data2[0] in low_list and data3[0] in high_list) or (data2[0] in high_list and data3[0] in low_list):                            n += 1                            # 如果命中了的話,本輪結(jié)束,開啟下一輪                            list_data_number.append(record_number)                             if f"{record_number}" in dict_time_record.keys():                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])                            else:                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]                              # print(record_number)                            record_number = 1  # 初始化                        else:                            record_number += 1  # 沒中,次數(shù)加一                            # 自加一                        break                elif m == 9:                    if data2[9] == data1[8]:                        N += 1                        if (data2[9] in low_list and data3[9] in high_list) or (data2[9] in high_list and data3[9] in low_list):                            n += 1                            list_data_number.append(record_number)                             if f"{record_number}" in dict_time_record.keys():                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])                            else:                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]                              # print(record_number)                            record_number = 1                        else:                            record_number += 1                        break                else:                    if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:                        N += 1                        if (data2[m] in low_list and data3[m] in high_list) or (data2[m] in high_list and data3[m] in low_list):                            n += 1                            list_data_number.append(record_number)                             if f"{record_number}" in dict_time_record.keys():                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])                            else:                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]                              # print(record_number)                            record_number = 1                        else:                            record_number += 1                        break    print(f"日期:{new_response['result']['data'][0]['preDrawTime'][:10]},總的梯子數(shù)為{N}個(gè),一共有{n}次命中,一共有{N - n}次掛了")    sh.write(sheet_seek_position, 1, N)    sh.write(sheet_seek_position, 2, n)    sh.write(sheet_seek_position, 3, N - n)     # new_list_data_number = list_data_number.sort()    list_data_number.sort()    # 進(jìn)行排序    dict_record = {}    # 設(shè)置空字典     for i in list_data_number:        if f"{i}" in dict_record.keys():  # 判斷是否已經(jīng)有了這個(gè)數(shù)字?            dict_record[f"{i}"] += 1            # 如果有的話,那么就會自加一        else:  # 如果沒有的話,那么就會創(chuàng)建并且賦值等于 1            dict_record[f"{i}"] = 1            # 創(chuàng)建一個(gè)新的字典元素,然后進(jìn)行賦值為 1    # print(dict_record)    # print(f"買彩票第幾次才中獎(jiǎng)?")    # print(f"按照我們的規(guī)律買彩票的情況:")    for j in dict_record.keys():        if (int(j) >= 6) and (int(j) < 15):            print(f"買{j}次才中獎(jiǎng)的次數(shù)為{dict_record[j]}")            print(dict_time_record[j])            str0 = ""            for letter in dict_time_record[j]:                str0 += letter                str0 += ", "            print(str0)            sh.write(sheet_seek_position, 4 + (int(j) - 6) * 2, dict_record[j])            # 寫入幾次            sh.write(sheet_seek_position, 4 + (int(j) - 6) * 2 + 1, str0[:-2])              # 注意這里應(yīng)該要改為 -2            # 寫入幾次對應(yīng)的時(shí)間            # print(j)    sheet_seek_position += 1    # 每次寫完了以后,要對位置進(jìn)行換行,換到下一行,從而方便下一行的寫入  # 保存wb.save('極速飛艇彩票分析結(jié)果.xls')


          運(yùn)行結(jié)果展示:

          展示1、

          展示2、


          從而,我們便解決了極速飛艇的彩票的數(shù)據(jù)分析
          然后,我們只需要稍稍改變一點(diǎn)點(diǎn)算法,其他的部分是完全一樣的啦,從而即就是可以實(shí)現(xiàn)極速賽車的數(shù)據(jù)分析了啦。

          修改的代碼在下面列出來了:
                      for m in range(10):                if m == 0:                    if data2[0] == data1[1]:                         N += 1                        if (data2[0] in low_list and data3[0] in low_list) or (data2[0] in high_list and data3[0] in high_list):                            n += 1                            # 如果命中了的話,本輪結(jié)束,開啟下一輪                            list_data_number.append(record_number)                             if f"{record_number}" in dict_time_record.keys():                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])                            else:                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]                              # print(record_number)                            record_number = 1  # 初始化                        else:                            record_number += 1  # 沒中,次數(shù)加一                            # 自加一                        break                elif m == 9:                    if data2[9] == data1[8]:                        N += 1                        if (data2[9] in low_list and data3[9] in low_list) or (data2[9] in high_list and data3[9] in high_list):                            n += 1                            list_data_number.append(record_number)                             if f"{record_number}" in dict_time_record.keys():                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])                            else:                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]                              # print(record_number)                            record_number = 1                        else:                            record_number += 1                        break                else:                    if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:                        N += 1                        if (data2[m] in low_list and data3[m] in low_list) or (data2[m] in high_list and data3[m] in high_list):                            n += 1                            list_data_number.append(record_number)                             if f"{record_number}" in dict_time_record.keys():                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])                            else:                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]                              # print(record_number)                            record_number = 1                        else:                            record_number += 1                        break

          總結(jié)

          這個(gè)需求不得不說確實(shí)是比較簡單的,但是,我在完成這個(gè)任務(wù)的過程中的確是學(xué)到了以前一些我并不太注意的東西。同時(shí)呢,也熟練的掌握了一些編程的技巧,雖然說這種比較簡單的活兒報(bào)酬不會太高,但是,我認(rèn)為在這個(gè)過程中我確實(shí)學(xué)到了不少東西,同時(shí)也成長了不少,因此,無論怎么說,其實(shí)也都還是挺不錯(cuò)的啦。
          如果想了解本文的程序運(yùn)行實(shí)例,請看下面的視頻:

          最后,如果本文對你有幫助的話,請?jiān)诹粞詤^(qū)給個(gè)三連哦!



          推薦閱讀:

          入門: 最全的零基礎(chǔ)學(xué)Python的問題  | 零基礎(chǔ)學(xué)了8個(gè)月的Python  | 實(shí)戰(zhàn)項(xiàng)目 |學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評,電影《后來的我們》 | 38年NBA最佳球員分析 |   從萬眾期待到口碑撲街!唐探3令人失望  | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個(gè)海量小姐姐素描圖 |


          趣味:彈球游戲  | 九宮格  | 漂亮的花 | 兩百行Python《天天酷跑》游戲!


          AI: 會做詩的機(jī)器人 | 給圖片上色 | 預(yù)測收入 | 碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


          自動(dòng)化辦公:

          PDF提取圖片和表格 | html一鍵保存pdf Pdf轉(zhuǎn)Word輕松搞定表格和水印! | Pdf轉(zhuǎn)Word


          年度爆款文案


          點(diǎn)閱讀原文,領(lǐng)廖雪峰視頻資料!

          瀏覽 21
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  re久久综合热 | 亚洲无码精品一区 | 色情在线免费 | 一道本无码在线播放 | 手机看片日 |