主頁 > 後端開發 > 第一個Python程式 | 機選彩票號碼+爬取最新開獎號碼

第一個Python程式 | 機選彩票號碼+爬取最新開獎號碼

2021-05-02 06:06:53 後端開發

(機選彩票號碼+爬取最新開獎號碼 | 2021-04-21)


學習記錄,好記不如爛筆頭
這個程式作用是<機選三種彩票型別的號碼>
程式內包含功能有如下:

  • 自動獲取最新的三種彩票的開獎號碼
  • 隨機生成三種彩票型別的號碼
  • 注冊
  • 登錄
  • 密碼加密
  • 資料寫入檔案
  • 檔案中提取資料
  • 時間模塊判斷早中晚

先上個演示 | 再附上打包后的程式exe | 再貼上完整源代碼

截至2021-04-20的最新彩票開獎資訊和程式獲取的一致,如圖:


演示程式下載>>>點擊下載 提取密碼:cisj

import re as m_re
import os as m_os
import time as m_time
import random as m_random
import easygui as m_easygui
import requests as m_requests


# 取開獎號碼
class HtmlInfo():
    def __init__(self):
        self.browser_header = {
            "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36"
                        "(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
        #福利彩票
        self.ddd_nums = {}# 福彩3D
        self.ssq_nums = {}# 雙色球
        self.qlc_nums = {}# 七樂彩
        self.urls = [
            r'http://kaijiang.500.com/sd.shtml',
            r'http://kaijiang.500.com/ssq.shtml',
            r'http://kaijiang.500.com/qlc.shtml'
        ]
        self.html_lable = [
            r'<span >(.*?)</span>',# 開獎日期-0
            r'<strong>(.*?)</strong>',# 開獎期號-1
            r'<li >(.*?)</li>',# 福彩3D-2
            r'<li >(.*?)</li>',# 雙色球-紅-3
            r'<li >(.*?)</li>',# 雙色球-藍-4
            r'<li >(.*?)</li>',# 七樂彩-紅-5
            r'<li >(.*?)</li>'# 七樂彩-藍-6
        ]

    def get_HtmlInfo(self, url):
        try:
            html = m_requests.get(url, headers=self.browser_header)
            html.encoding = 'gbk'# 一下午試圖想在正則中解決它...cnm,耽誤不少時間
        except TypeError:
            print('網路中斷或其他原因!')
            return# 直接中斷程式, 函式內用 return | 函式外用 exit()

        # 取最新的日期
        # lottery_date = m_re.findall('<td align="center">(.*?)</td>', html.text, m_re.S)

        # 取最新的開獎號碼
        # for loop_urls in range(len(self.urls)):
        if self.urls[0] == url:
            # 福彩3D: 開獎日期, 開獎期號, 開獎號碼, 寫入字典
            self.lottery_date = m_re.findall(self.html_lable[0], html.text, m_re.S)[0]
            lottery_date_nums = m_re.findall(self.html_lable[1], html.text, m_re.S)[1]
            lottery_nums = m_re.findall(self.html_lable[2], html.text, m_re.S)
            # 資料進字典
            self.ddd_nums[lottery_date_nums] = lottery_nums
            # print(self.ddd_nums)

        if self.urls[1] == url:
            # 雙色球: 號碼串列-合并期號, 開獎日期, 開獎期號, 開獎號碼 紅六個 / 藍一個, 紅藍號碼合并串列
            lottery_nums = []
            lottery_date = m_re.findall(self.html_lable[0], html.text, m_re.S)[0]
            lottery_date_nums = m_re.findall(self.html_lable[1], html.text, m_re.S)[1]
            lottery_nums_red = m_re.findall(self.html_lable[3], html.text, m_re.S)[:6]
            lottery_nums_blue = m_re.findall(self.html_lable[4], html.text, m_re.S)[:1]
            # 下面用extend 插了兩次是因為我想把紅藍球變成一個串列, 如果弄成只插一次就會造成串列套串列,很是疑惑
            lottery_nums.extend(lottery_nums_red)
            lottery_nums.extend(lottery_nums_blue)
            # 資料進字典
            self.ssq_nums[lottery_date_nums] = lottery_nums
            # print(self.ssq_nums)

        if self.urls[2] == url:
            # 七樂彩: 號碼串列-合并期號, 開獎日期, 開獎期號, 開獎號碼 紅七個 / 藍一個, 紅藍號碼合并串列
            lottery_nums = []
            lottery_date = m_re.findall(self.html_lable[0], html.text, m_re.S)[0]
            lottery_date_nums = m_re.findall(self.html_lable[1], html.text, m_re.S)[1]
            lottery_nums_red = m_re.findall(self.html_lable[5], html.text, m_re.S)[:7]
            lottery_nums_blue = m_re.findall(self.html_lable[6], html.text, m_re.S)[:1]

            lottery_nums.extend(lottery_nums_red)
            lottery_nums.extend(lottery_nums_blue)
            # 資料進字典
            self.qlc_nums[lottery_date_nums] = lottery_nums
            # print(self.qlc_nums)


# 對密碼加密-解密, 上面代碼很長 總感覺可以再精簡優化下, 目前對于類的使用不是很熟練
class AppCryptos():
    def __init__(self):
        self.token_list = [
            '0000000000_'
            'bC0>aB3?aA0!aG1%hI1$'
            'eK6)dA8&qB4@lC0$bA0&aI0eP1#cC0$'
            '!@#$%^&*()_+aF0!bG2!cE4_eC1^bE0^aE4@bC0{nB'
        ]
        self.enctry_str = ''# 加密資料
        self.dectry_str = ''# 解密資料

    # 加密
    def enctry_AppCryptos(self, key):# key為傳入的密碼
        for i,j in zip(key, str(self.token_list)):
            temp_ij = str(ord(i) + ord(j)) + str(self.token_list[0][:15])
            self.enctry_str += temp_ij
            # print(self.enctry_str)
        return self.enctry_str

    # 解密
    def dectry_AppCryptos(self, key):# key為傳入的密文
        for i,j in zip(key.split(str(self.token_list[0][:15]))[:-1], str(self.token_list)):
            temp_ij = chr(int(i) - ord(j))
            self.dectry_str += temp_ij
            # print(self.dectry_str)
        return self.dectry_str



# EasyGui
class EasyGuiUI():
    def __init__(self):
        self.app_config = [
            r'AppConfig.ini',# 檔案可自定義目錄存放,也可以跟主程式走
            r'MainConfig.ini',# 檔案跟著主程式走
            r'config_path=',# 用戶自己選擇的組態檔目錄路徑
            r'configfile_path=',# 用戶自己選擇的組態檔目錄路徑 + AppConfig.ini路徑
            r'username=',# 用戶昵稱
            r'userkey='# 加密的程式密碼的密文
        ]

        # 取三個數為一注
        self.loop_ddd = (0, 9)
        # 取六個紅球,一個藍球為一注
        self.loop_ssq_red = (1, 33)
        self.loop_ssq_blue = (1, 16)
        # 七個基本號, 一個特別號為一注
        self.loop_qlc = (1, 30)

        self.box_msg = [
            '歡迎進入彩票號碼生成器!\n是否進行程式初始化?\n自定義組態檔目錄或程式默認目錄',
            '選擇一個檔案夾!',
            '歡迎使用機選彩票號碼程式, 祝您早日中大獎!',
            '請輸入程式密碼',
            '注冊成功!',
            '\n\n\n點擊下方[查看最新開獎號碼]按鈕以獲取開獎號碼'
        ]
        self.box_title = [
            '程式初始化',
            '激活程式',
            '登錄驗證',
            '機選號碼'
        ]
        self.indexbox_choices = [
            ['0', '確定'],# 用來判斷choices_msg按鈕回傳值
            ['1', '默認'],
            ['2', '機選號碼'],
            ['3', '查看最新開獎號碼'],
            ['4', '退出程式']
        ]
        self.indexbox_errmsg = [
            '未知錯誤!',
            '檔案不存在',
            '',
            '',
            '主程式檔案失效,請重新運行程式!'
        ]
        self.multpasswordbox_fields = [
            '*昵稱',
            '*程式密碼'
        ]
        # 如果函式中已經有相同變數,應該是優先讀函式中的, 有點忘記了...
        # 想起來一個, 相同方法下的變數互相呼叫之前,得先呼叫被呼叫的那個方法
        self.temp_enctry_str = ''# 臨時存放加密的密文,寫入到檔案MainConfig.ini. 如果函式中已經有相同變數,應該是優先讀函式中的
        self.temp_ext_userkey = []# 臨時存放提取出來的密文.
        self.temp_ext_username = []# 臨時存放提取出來的昵稱

    # 運行程式 初始化界面 | 用戶選擇目錄或者程式直接走默認目錄
    def init_EasyGuiUI(self):
        try:
            with open(self.app_config[1], encoding='utf-8') as init_f1:
                init_f1.close()# 走個程序就直接關掉, 不占用
                EasyGuiUI().reg_EasyGuiUI()
        except OSError:
            # 初始界面, 因為檢查不到檔案MainConfig.ini, 所以初始化一下 目的是生成AppConfig.ini和MainConfig.ini兩個檔案
            # 原本還想弄一個判斷有無檔案AppConfig.ini, 因為這個檔案是可以讓用戶自定義目錄去生成的,
            #    如果作這個判斷就把檔案AppConfig.ini的目錄路徑也寫到檔案MainConfig.ini中, 想了下還是沒寫這個, 只驗證有無檔案MainConfig.ini
            choices_msg = m_easygui.indexbox(
                self.box_msg[0],
                self.box_title[0],
                choices=(self.indexbox_choices[0][1],self.indexbox_choices[1][1])
            )

            # 判斷用戶是選擇的[確定]按鈕, 開始呼叫diropenbox() 函式選擇目錄
            if choices_msg == int(self.indexbox_choices[0][0]):
                choices_path = m_easygui.diropenbox(self.box_msg[1])
                # 這里會先生成檔案 MainConfig.ini, 避免與下方的m_os.chdir() 函式沖突
                with open(self.app_config[1], 'w', encoding='utf-8') as user_f1:
                    user_f1.write(
                        self.app_config[2] + m_os.getcwd() + ';' + '\n' + 
                        self.app_config[3] + m_os.getcwd() + '\\' + self.app_config[1] + ';'
                    )
                # 選擇目錄視窗如果直接關閉在這里做個TypeError處理
                try:
                    m_os.chdir(choices_path)
                except TypeError:
                    return
                # 合并一下選擇的目錄跟檔案名AppConfig.ini,得到一個完整路徑
                merge_path = m_os.path.join(m_os.getcwd(), self.app_config[0])
                # 根據用戶選擇的目錄直接覆寫檔案AppConfig.ini
                with open(merge_path, 'w', encoding='utf-8') as user_f2:
                    user_f2.write(
                        self.app_config[2] + choices_path + ';' + '\n' + 
                        self.app_config[3] + merge_path + ';'
                    )
                EasyGuiUI().reg_EasyGuiUI()
            # 判斷用戶是選擇的[默認]按鈕, 直接在程式目錄下進行覆寫兩個檔案MainConfig.ini AppConfig.ini
            elif choices_msg == int(self.indexbox_choices[1][0]):
                # 選擇[默認] 直接在程式所在目錄生成檔案
                with open(self.app_config[0], 'w', encoding='utf-8') as app_f1,\
                        open(self.app_config[1], 'w', encoding='utf-8') as app_f2:
                            app_f1.write(
                                self.app_config[2] + m_os.getcwd() + ';' + '\n' + 
                                self.app_config[3] + m_os.getcwd() + '\\' + self.app_config[0] + ';'
                            )
                            app_f2.write(
                                self.app_config[2] + m_os.getcwd() + ';' + '\n' + 
                                self.app_config[3] + m_os.getcwd() + '\\' + self.app_config[1] + ';'
                            )
                EasyGuiUI().reg_EasyGuiUI()

    # 注冊
    def reg_EasyGuiUI(self):
        # 在啟用注冊UI之前 判斷下是否已經進行了注冊, 判斷檔案MainConfig.ini中有無self.app_config[4]/[5]這兩個字串
        # 這種判斷應該還有更好的寫法, 截至學到目前的知識 確實想不出了
        with open(self.app_config[1], 'r', encoding='utf-8') as read_f1:
            #在這個變數出來前, 原地轉圈琢磨了好久. read()這個好像并不能用在if陳述句的多重判斷中,期望的結果會False
            read_f1_temp = read_f1.read()
            if self.app_config[4] in read_f1_temp and self.app_config[5] in read_f1_temp:
                return EasyGuiUI().login_EasyGuiUI()
        # 這下面是原地轉圈時琢磨的
        # if (self.app_config[4] and self.app_config[5]) in read_f1:
        #     return EasyGuiUI().login_EasyGuiUI()            
                # aa = m_re.search('username=*|userkey=*', i)
                # if aa:
                #     print(aa.group())
                #     print(i)
        # if [read_f1_temp1.strip().find('username=') for read_f1_temp1 in read_f1]:
        #     print('11')

        # with open(self.app_config[1], 'r+', encoding='utf-8') as read_f2:
        #     if [read_f2_temp1.strip().find(self.app_config[5]) for read_f2_temp1 in read_f2.readlines()]:
        #         return EasyGuiUI().login_EasyGuiUI()

        reg_values = []
        reg_values = m_easygui.multpasswordbox(
            self.box_msg[2],
            self.box_title[1],
            fields=(self.multpasswordbox_fields[0],self.multpasswordbox_fields[1])
        )

        while True:
            # 回圈后 重置self.indexbox_errmsg[2]的訊息為空字串
            self.indexbox_errmsg[2] = self.indexbox_errmsg[3]
            # 回傳值為None,結束
            if reg_values == None:
                return
            # 這塊還想寫一個昵稱只能輸入純英文, 程式密碼只能輸入純數字
            for i in range(len(self.multpasswordbox_fields)):
                if reg_values[i] == '' and self.multpasswordbox_fields[i][0] == '*' and self.multpasswordbox_fields[i][0] == '*':
                    self.indexbox_errmsg[2] += ('【%s】為必填項,請重新填寫!\n' % self.multpasswordbox_fields[i])
            if self.indexbox_errmsg[2] == '':
                break

            reg_values = m_easygui.multpasswordbox(
                self.indexbox_errmsg[2],
                self.box_title[1],
                fields=(self.multpasswordbox_fields[0],self.multpasswordbox_fields[1]),
                values=reg_values# 這里是留存填寫過的內容,并顯示在程式,避免用戶二次輸入
            )
        # 聯動enctry_AppCryptos() 加密函式, 對用戶輸入的<程式密碼>進行加密
        link_AppCryptos = AppCryptos()
        link_AppCryptos.enctry_AppCryptos(reg_values[1])
        self.temp_enctry_str = link_AppCryptos.enctry_str
        # 將昵稱和加密的程式密碼存入檔案MainConfig.ini
        # 這塊應該還要做個檔案中是否存在username和userkey的字串做對應的寫入判斷(如果字串存在多個,或者沒有,或者檔案不在,或者權限不夠等)
        # 不過這次就簡單寫一下資料存入檔案, 其他的心里寫了就行
        try:
            with open(self.app_config[1], 'a', encoding='utf-8') as enctry_f1:
                enctry_f1.write(
                    '\n' + self.app_config[4] + reg_values[0] + ';' + 
                    '\n' + self.app_config[5] + self.temp_enctry_str + ';'
                )
            m_easygui.msgbox(self.box_msg[4])
            EasyGuiUI().login_EasyGuiUI()
        except OSError:
            m_easygui.msgbox(self.indexbox_errmsg[4])
        # print(self.enctry_str)

    # 登錄
    def login_EasyGuiUI(self):
        # 登錄這塊應該也要寫一個取檔案中密文的時候來個檔案是否存在或檔案中需要的字串是否存在, 心里寫了!
        # 想了下 驗證檔案這些步驟其實可以單獨弄個函式放在那邊來呼叫, 這樣代碼應該可以精簡一些
        # 在open的時候用'x'模式 檢查檔案是否存在?
        login_return_cont = m_easygui.passwordbox(self.box_msg[3], self.box_title[2])

        # 讀取檔案中userkey存放的密文
        with open(self.app_config[1], encoding='utf-8') as dectry_f1:
            # for read_line in dectry_f1:
            ext_userkey = m_re.findall(r'userkey=(.*?);', dectry_f1.read(), m_re.S)
            # print(ext_userkey)

        # 聯動enctry_AppCryptos(),進行一次密碼加密,然后驗證加密好的密文是否存在檔案內
        link_AppCryptos = AppCryptos()
        link_AppCryptos.dectry_AppCryptos(ext_userkey[0])
        if login_return_cont == link_AppCryptos.dectry_str:
            EasyGuiUI().panel_EasyGuiUI()
        elif login_return_cont == None:
            return
        else:
            return EasyGuiUI().login_EasyGuiUI()

    # 登錄成功后呼叫的, 獲取最新開獎號碼給面板顯示
    # 此方法被panel_EasyGuiUI(self) 方法來呼叫
    def get_nums_ForPanel(self):
        # 獲取最新中獎號碼, 為了給面板顯示
        link_HtmlInfo = HtmlInfo()
        for loop_urls in range(len(link_HtmlInfo.urls)):
            link_HtmlInfo.get_HtmlInfo(link_HtmlInfo.urls[loop_urls])
        dict_ddd = link_HtmlInfo.ddd_nums
        dict_ssq = link_HtmlInfo.ssq_nums
        dict_qlc = link_HtmlInfo.qlc_nums
        dict_ddd_value = 'https://www.cnblogs.com/tcdhl/archive/2021/05/01/,'.join(list(dict_ddd.values())[0])
        dict_ssq_value = 'https://www.cnblogs.com/tcdhl/archive/2021/05/01/,'.join(list(dict_ssq.values())[0])
        dict_qlc_value = 'https://www.cnblogs.com/tcdhl/archive/2021/05/01/,'.join(list(dict_qlc.values())[0])

        self.marge_msgs_get_nums_ForPanel = (
            # ext_username[0] + self.box_msg[2] + '\n' +
            '第[' + list(dict_ddd)[0] + ']期福彩3D開獎號碼: ' + dict_ddd_value + '\n' +
            '第[ ' + list(dict_ssq)[0] + ' ]期雙色球開獎號碼: ' + dict_ssq_value + '\n' +
            '第[ ' + list(dict_qlc)[0] + ' ]期七樂彩開獎號碼: ' + dict_qlc_value
        )

    # 機選號碼, 機選的規則都為:彩票投注中的單式投注!
    # 此方法被panel_EasyGuiUI(self) 方法來呼叫
    def get_loopnums_ForPanel(self, keyloopnums):
        if keyloopnums == 'start':
            # 機選福彩3D
            # 使用串列推導式 把需要的每一個元素轉換成字串,這樣做的方式是方便呈現的時候 數字后面自帶逗號
            # loopnums_1_ddd = ''
            loopnums_1_ddd = [str(m_random.randint(self.loop_ddd[0],self.loop_ddd[1])) for loop in range(3)]
            loopnums_1_ddd = ','.join(loopnums_1_ddd)# # 三個數字轉換成字串且用逗號來分割進行展示
            # print(loopnums_1_ddd)# 輸出一下 機選出來的三個數字

            # 機選雙色球
            # loopnums_2_ssq = []
            loopnums_2_red = [str(m_random.randint(self.loop_ssq_red[0],self.loop_ssq_red[1])) for loop in range(6)]
            loopnums_2_blue = [str(m_random.randint(self.loop_ssq_blue[0],self.loop_ssq_blue[1])) for loop in range(1)]
            loopnums_2_red.append(loopnums_2_blue[0])# 藍球合并到紅球的串列
            loopnums_2_ssq = ','.join(loopnums_2_red)# 定一個新的變數名稱 | 七個數字轉換成字串且用逗號來分割進行展示
            # print(loopnums_2_ssq)# 輸出一下 機選出來且合并后的 紅+藍七個數字

            # 機選七樂彩
            loopnums_3_red = [str(m_random.randint(self.loop_qlc[0],self.loop_qlc[1])) for loop in range(7)]
            loopnums_3_blue = [str(m_random.randint(self.loop_qlc[0],self.loop_qlc[1])) for loop in range(1)]
            loopnums_3_red.append(loopnums_3_blue[0])
            loopnums_3_qlc = ','.join(loopnums_3_red)
            # print(loopnums_3_qlc)

            # 三個彩種機選的號碼合并掉,給panel_EasyGuiUI() 函式中的indexbox() 呼叫
            self.marge_msgs_get_loopnums_ForPanel = (
                '機選的福彩3D號碼: ' + loopnums_1_ddd + '\n' +
                '機選的雙色球號碼: ' + loopnums_2_ssq + '\n' +
                '機選的七樂彩號碼: ' + loopnums_3_qlc + '\n' +
                '截屏或拍照后去彩票站購買, 祝你鴻運當頭!'
            )
        else:
            pass

    # 登錄成功后 顯示獲取的最新彩票號碼 | 按鈕形式機選號碼并以msgbox() 函式顯示給用戶 | over!
    def panel_EasyGuiUI(self):
        self.get_nums_ForPanel()
        # self.get_loopnums_ForPanel()

        # 讀取檔案中username存放的昵稱
        with open(self.app_config[1], encoding='utf-8') as read_f1:
            ext_username = m_re.findall(r'username=(.*?);', read_f1.read(), m_re.S)

        # 加一個時間判斷
        # 06:00~10:00>早上 10:00~12:00>中午 12:00~18:00>下午  18:00~06:00>晚上
        get_time = m_time.localtime()
        # print(get_time.tm_hour)
        if 0 <= get_time.tm_hour <= 4:
            indexbox_msg_time = '凌晨時段,注意休息: '
        elif 5 <= get_time.tm_hour <= 10:
            indexbox_msg_time = '早上好: '
        elif 11 <= get_time.tm_hour <= 12:
            indexbox_msg_time = '中午好: '
        elif 13 <= get_time.tm_hour <= 18:
            indexbox_msg_time = '下午好: '
        elif 19 <= get_time.tm_hour <= 23:
            indexbox_msg_time = '晚上好: '
        else:
            indexbox_msg_time = '奈何橋見: '

        choices_msg = m_easygui.indexbox(
            msg=(indexbox_msg_time + ext_username[0] + self.box_msg[5]),
            title=self.box_title[3],
            choices=(self.indexbox_choices[2][1],self.indexbox_choices[3][1],self.indexbox_choices[4][1])
        )

        while True:
            if choices_msg == 0:
                self.get_loopnums_ForPanel('start')# 寫這里是因為要每次點擊都獲取新的亂數
                # 按鈕回傳0 則去機選隨機號碼展示給用戶
                choices_msg = m_easygui.indexbox(
                    msg=self.marge_msgs_get_loopnums_ForPanel,
                    title=self.box_title[3],
                    choices=(self.indexbox_choices[2][1],self.indexbox_choices[3][1],self.indexbox_choices[4][1])
                )
            elif choices_msg == 1:
                # 按鈕回傳1 則去獲取最新號碼展示給用戶
                choices_msg = m_easygui.indexbox(
                    msg=self.marge_msgs_get_nums_ForPanel,
                    title=self.box_title[3],
                    choices=(self.indexbox_choices[2][1],self.indexbox_choices[3][1],self.indexbox_choices[4][1])
                )
            elif choices_msg == 2:
                # 直接結束
                break
            else:
                # 這里比如直接關閉 回傳了None
                break


app_run = EasyGuiUI()
app_run.init_EasyGuiUI()
# app_run.get_loopnums_ForPanel()

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/282066.html

標籤:其他

上一篇:Mybatis使用注解開發

下一篇:MATLAB實體:非線性方程數值解法(迭代解)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more