主頁 > 後端開發 > 記賬程式2.0

記賬程式2.0

2021-06-25 06:13:17 後端開發

程式2.0.jpg

需求背景:

為了更好的解放雙手,提高記賬效率,本人想要制作一個基于python的自動化記賬程式,用于統計本人每星期、每月、每年,甚至是每日的盈虧記錄,目前該程式是處于半自動化狀態,后期會逐漸更新,爭取全套流程純自動化,不需要過多的人工參與,擺脫苦哈哈記賬統計的耗時任務

需求總目標:

日賬目:連接常用的支付通信軟體,將自己每花費一筆,就自動歸類在一個臨時存盤位置,然后這個臨時存盤位置可以用excel格式記錄存盤,并將其下載到指定的電腦桌面位置
星期賬目:對一星期的花銷和盈收做出統計,并用圖的方式展示各種類花銷情況和收入情況
月賬目:對一個月(即四個星期)的花銷和盈收做出統計,并用圖的方式展示各種類花銷情況和收入情況
年賬目:對一年(即12個月)的花銷和盈收做出統計,并用圖的方式展示各種類花銷情況和收入情況

嘮嗑本次記賬程式2.0出現背景:

上次寫過一篇記賬程式1.0,我對其中含有的漏洞進行填坑,這里有傳送門:自動化記賬程式1.0,簡短回顧一下,上次的程式只是對一星期的的總收支和總收入搜集并統計,并實時計算出剩余的余額還有多少,可是這未免過于單調,因為這個只能是簡單描述,并不能讓人更加清晰知道自己的收入是在哪一塊占據的多?自己的支出是在哪一塊占據的多?并且純數字的展示,會不會對數字不敏感的人不友好呀(比如說本人)

本次記賬程式2.0的目標:

對上次的記賬程式1.0做出改進,額外增加對收/支種類的展述和對收/支種類的資料統計,并疊加對一星期總收入、總支出和剩余額的柱狀圖呈現,和對收/支出種類的資料統計的餅圖呈現,

具體內容

前期準備作業

這次實作記賬程式2.0的準備作業,是基于上次的記賬程式1.0,這里有傳送門:自動化記賬程式1.0;除此之外,還要額外下載一個新python庫,名為xlsxwriter庫,這個庫秒殺之前我給你們介紹的xlwt庫,它不僅能寫入資料,還能繪圖,也支持xlsx格式的檔案,如何下載,這里我因為篇幅原因,就只拋出核心代碼:pip install xlsxwriter,具體如何操作,可以回顧我上一篇文章,這里有傳送門:自動化記賬程式1.0,

編碼思路:

在實作自動化記賬程式時,容我先捋清一下思路:
1.思想認識上,這個是基于上一篇文章的思路并進行改良,額外新增對一星期收/支類別統計,并以可視化圖形呈現的,第一次看這篇文章的一定要回顧上一期我寫過的記賬程式1.0呀【重要事情說三遍~】
2.對新增部分首先要對原本excel模板做出改進
3.記錄單表情況下,對收/支種類的名稱獲取,并將其中涉及到每個收/支的金額做統計
4.然后擴大范圍,從記錄單表到擴大到多表(即從2021年5月30號到2021年6月5號的記賬表)
5.接下來就是對圖形的繪制了,這里包括繪制收入、支出和剩余利潤的柱形圖和收/支的類別資料的餅圖
6.并將統計到的資料結果使用xlsxwriter庫寫入到excel表中,當然,本次不會再使用xlwt庫,將會對原本程式1.0的寫入excel代碼做出改變
7.打包成.exe腳本,這里就不會詳細介紹實作程序,只拋出核心代碼和結果,不懂的可翻閱我寫過的記賬程式1.0【重要事情說四遍~~】

開始編碼:

編碼思路認識清楚后,就愉快編碼了:

excel模板改造

0.png
以上這副圖是程式1.0的excel模板

1.png

以上這幅圖是改良后,程式2.0的excel模板
這個在接下來程式定位獲取資料的時候很重要,如果是小白,可以對照查看

匯入第三方庫

這里要匯入三個python庫,分別是xlrd庫、calendar、xlsxwriter
匯入庫的原始碼如下【含注釋,最好手動敲寫】

import xlrd# 從Excel檔案讀取資料和格式化資訊的庫,支持.xls以及.xlsx檔案
import calendar# 匯入日歷庫
import xlsxwriter # 用于將資料和格式化資訊寫入Excel檔案的庫

對收/支出種類描述做單表統計

要實作收/支出種類描述做單表統計,可以先從如何實作支出種類描述的單表統計開始,思路是:
打開檔案-->選擇要統計資料的表格-->獲取資料-->用函式來進行封裝
對單表的支出種類描述統計的原始碼如下【含注釋,最好手動敲寫】:

# 獲取最完整的支出分類字典,其中end_time為結束時間:
def get_full_pay_series(end_time):
    # 存盤完整的支出種類名稱
    full_pay_series = {}
    # 確定檔案路徑
    excel_url = str(end_time)
    # 打開xlsx的檔案
    data = https://www.cnblogs.com/dyxi/p/xlrd.open_workbook(excel_url)
    #打開第一張表
    table = data.sheets()[0]
    # 獲取第四行的種類資料【從0開始】
    pay_series = table.row_values(3)
    # 去除種類串列里的空值:
    while"" in pay_series:
        pay_series.remove("")
    # 將完整的種類遍歷,并存盤到full_series字典中,并設定其默認值是0
    for single_series in pay_series[1:]:
        full_pay_series.setdefault(single_series,0)
    return full_pay_series

同理,獲取單表收入種類的方法也是類似的,
對單表的收入種類描述統計的原始碼如下【含注釋,最好手動敲寫】:

# 獲取最完整的收入分類字典,其中end_time為結束時間:
def get_full_income_series(end_time):
    # 存盤完整的收入種類名稱
    full_income_series = {}
    # 確定檔案路徑
    excel_url = str(end_time)
    # 打開xlsx的檔案
    data = https://www.cnblogs.com/dyxi/p/xlrd.open_workbook(excel_url)
    #打開第一張表
    table = data.sheets()[0]
    # 獲取第八行的種類資料【從0開始】
    income_series = table.row_values(7)
    # 去除種類串列里的空值:
    while"" in income_series:
        income_series.remove("")
    # 將完整的種類遍歷,并存盤到full_series字典中,并設定其默認值是0
    for single_series in income_series[1:]:
        full_income_series.setdefault(single_series,0)
    return full_income_series

對收/支出種類金額做單表統計

這個問題和剛才講述如何對收/支出種類描述做單表統計的問題有異曲同工支出,處理的方式依舊是:
打開檔案-->選擇要統計資料的表格-->獲取資料-->用函式來進行封裝

對單表的支出種類金額統計的原始碼如下【含注釋,最好手動敲寫】:

# 獲取單張表的支出金額
def get_single_pay_series(pay_url):# pay_url為支出表的路徑
    # 確定檔案路徑
    excel_url = str(pay_url)
    # 打開xlsx的檔案
    data = https://www.cnblogs.com/dyxi/p/xlrd.open_workbook(excel_url)
    #打開第一張表
    table = data.sheets()[0]
    # 獲取第四行的種類資料【從0開始】
    pay_series = table.row_values(3)
    # 去除種類串列里的空值:
    while"" in pay_series:
        pay_series.remove("")
    # 獲取第六行的種類支出金額資料【從0開始】
    pay_series_val = table.row_values(5)
    # 去除種類串列里的空值:
    while "" in pay_series_val:
        pay_series_val.remove("")
    # 將支出種類和支出種類金額,用字典存盤起來
    pay_series_dict = dict(zip(pay_series[1:],pay_series_val[1:]))
    return pay_series_dict

對單表的收入種類金額統計的原始碼如下【含注釋,最好手動敲寫】:

# 獲取單張表的收入金額
def get_single_income_series(income_url):# income_url為收入表的路徑
    # 確定檔案路徑
    excel_url = str(income_url)
    # 打開xlsx的檔案
    data = https://www.cnblogs.com/dyxi/p/xlrd.open_workbook(excel_url)
    #打開第一張表
    table = data.sheets()[0]
    # 獲取第八行的種類資料【從0開始】
    income_series = table.row_values(7)
    # 去除種類串列里的空值:
    while"" in income_series:
        income_series.remove("")
    # 獲取第十行的種類支出金額資料【從0開始】
    income_series_val = table.row_values(9)
    # 去除種類串列里的空值:
    while "" in income_series_val:
        income_series_val.remove("")
    # 將支出種類和支出種類金額,用字典存盤起來
    income_series_dict = dict(zip(income_series[1:],income_series_val[1:]))
    return income_series_dict

獲取一星期的表的收入和支出種類資料統計

從單表到對表,獲取的思路大概類似,唯一不同是對多個檔案進去的處理,因為我依舊是遵照用時間來定義每天的記賬記錄,因此要對時間做處理,不懂的可翻閱我寫過的記賬程式1.0【重要事情說五遍~】,并且要用字典或者串列裝載結果,這里我兩種都有使用,

獲取一星期的表的收入和支出種類資料統計的原始碼如下【含注釋,最好手動敲寫】:

# 獲取一星期的表的收入和支出種類資料統計

# start取記賬的開始日期,如2021-5-23
# end取記賬的結束日期,如2021-5-29
def get_pay_and_income_series(start,end):
    # 存盤所有支出和收入的種類和值
    all_series_and_value = https://www.cnblogs.com/dyxi/p/[]
    
    # 分隔開始時間,分成年月日
    start_split = str(start).split("-")
    # 分隔結束時間,分成年月日
    end_split = str(end).split("-")
    # 確定結束檔案的路徑
    end_excel_url = "../1日賬單/{}-{}-{}.xlsx".format(end_split[0],end_split[1],end_split[2])
    # 完整的支出種類名稱【以最后的結束檔案為主】
    full_pay_series = get_full_pay_series(end_excel_url)
    # 完整的收入種類名稱【以最后的結束檔案為主】
    full_income_series = get_full_income_series(end_excel_url)
    
    # 判斷開始和結束的月份是否一致
    if int(start_split[1]) == int(end_split[1]):
        # 獲取指定這個月的開始 到 結束的賬單名
        for this_day in range(int(start_split[2]),int(end_split[2])+1):#【this_day指的是月的天數】
            # 確定檔案路徑
            this_excel_url = "../1日賬單/{}-{}-{}.xlsx".format(start_split[0],start_split[1],this_day)
            # 獲取單張表的支出種類和金額【索引從0開始】
            pay = get_single_pay_series(this_excel_url)
            # 遍歷單張表的支出種類名稱和金額
            for key,value in pay.items():
                # 如果支出種類名稱在完整的支出種類名稱中
                if key in full_pay_series:
                    # 則取出他的值進行累計
                    full_pay_series[key] += value
                else:
                    # 否則保持不變
                    full_pay_series[key]
            # 獲取單張表的收入種類和金額【索引從0開始】
            income = get_single_income_series(this_excel_url)
            # 遍歷單張表的支出種類名稱和金額
            for key,value in income.items():
                # 如果支出種類名稱在完整的支出種類名稱中
                if key in full_income_series:
                    # 則取出他的值進行累計
                    full_income_series[key] += value
                else:
                    # 否則保持不變
                    full_income_series[key]
            
    else:
        # 獲取這月的總天數
        this_month_day = calendar.monthlen(int(start_split[0]),int(start_split[1]))
        # 前部分:獲取指定月的開始 到 這月結束的賬單名
        for pre_day in range(int(start_split[2]),this_month_day+1):#【pre_day指的是這個月/年的天數】
            # 確定檔案路徑
            pre_excel_url = "../1日賬單/{}-{}-{}.xlsx".format(start_split[0],start_split[1],pre_day)
            # 獲取單張表的支出種類和金額【索引從0開始】
            pay = get_single_pay_series(pre_excel_url)
            # 遍歷單張表的支出種類名稱和金額
            for key,value in pay.items():
                # 如果支出種類名稱在完整的支出種類名稱中
                if key in full_pay_series:
                    # 則取出他的值進行累計
                    full_pay_series[key] += value
                else:
                    # 否則保持不變
                    full_pay_series[key]
            # 獲取單張表的收入種類和金額【索引從0開始】
            income = get_single_income_series(pre_excel_url)
            # 遍歷單張表的支出種類名稱和金額
            for key,value in income.items():
                # 如果支出種類名稱在完整的支出種類名稱中
                if key in full_income_series:
                    # 則取出他的值進行累計
                    full_income_series[key] += value
                else:
                    # 否則保持不變
                    full_income_series[key]
        # 后部分:獲取新月的開始 到 指定月結束的賬單名
        for after_day in range(1,int(end_split[2])+1):#【after_day指的是新月/新年的天數】
            # 確定檔案路徑
            after_excel_url = "../1日賬單/{}-{}-{}.xlsx".format(end_split[0],end_split[1],after_day)
            # 獲取單張表的支出種類和金額【索引從0開始】
            pay = get_single_pay_series(after_excel_url)
            # 遍歷單張表的支出種類名稱和金額
            for key,value in pay.items():
                # 如果支出種類名稱在完整的支出種類名稱中
                if key in full_pay_series:
                    # 則取出他的值進行累計
                    full_pay_series[key] += value
                else:
                    # 否則保持不變
                    full_pay_series[key]
            # 獲取單張表的收入種類和金額【索引從0開始】
            income = get_single_income_series(after_excel_url)
            # 遍歷單張表的支出種類名稱和金額
            for key,value in income.items():
                # 如果支出種類名稱在完整的支出種類名稱中
                if key in full_income_series:
                    # 則取出他的值進行累計
                    full_income_series[key] += value
                else:
                    # 否則保持不變
                    full_income_series[key]
    # 將一星期支出的種類和金額加入all_series_and_value串列中
    all_series_and_value.append(full_pay_series)
    # 將一星期收入的種類和金額加入all_series_and_value串列中
    all_series_and_value.append(full_income_series)
    return all_series_and_value

注:如果想要檢測一下自己寫的方法是否可行,可以做一個區域測驗,就是呼叫自己寫的函式來查看自己有沒有成功獲取自己想要的資料

# 簡單區域測驗自己有無獲取到資料
result2 = get_pay_and_income_series("2021-5-30","2021-6-5")
print(result2)

以上是本人自己測驗的代碼,僅作為參考,得到的效果圖如下:

2.png

繪制柱狀圖,用作對“支出-收入-利潤”的可視化呈現
這里是新增部分,繪圖主要抓住獲取繪圖的資料,繪圖的系列資料(包含繪圖的x/y位置)、圖表的頭部標題和x/y軸的標題、圖表的風格和樣式(這個看個人需要,都是修飾和美化的),
這部分,本人建議小白最好嘗試先用xlsxwriter庫繪制一個柱狀圖,懂其中的使用方法,再根據業務需要寫個函式封裝起來,方便直接使用,

“支出-收入-利潤”的柱形圖繪制的原始碼如下【含注釋,最好手動敲寫】:

# 繪制柱狀圖
'''
引數講解:
    sheet_name:為作業表名
    x_start_cell:為x軸的資料開始
    x_end_cell:為x軸的資料結束
    y_start_cell:為y軸的資料開始
    y_end_cell:為y軸的資料結束
    out_line_color:為柱狀圖的外框線【默認是yellow】
    bar_title:為設定柱狀圖的標題
    bar_x_axis:為設定X軸的名稱
    bar_y_axis:為設定Y軸的名稱
    tar_set_cell:為圖表安放的位置
    x_offset:設定X軸的偏移量【默認是25】
    y_offset:設定Y軸的偏移量【默認是10】
'''
def char_bar(sheet_name,x_start_cell,x_end_cell,
             y_start_cell,y_end_cell,bar_title,bar_x_axis,
             bar_y_axis,tar_set_cell,out_line_color="yellow",x_offset=25,y_offset=10):
    # 將其所有輸入的引數集合在同一個串列中,統統轉換成字符型資料
    origin_data = https://www.cnblogs.com/dyxi/p/[sheet_name,x_start_cell,x_end_cell,y_start_cell,y_end_cell,out_line_color,bar_title,bar_x_axis,bar_y_axis,tar_set_cell]
    ## 將串列里的資料統統轉換成字符型資料
    str_data = list(map(str,origin_data))
    
    ## 創建一個柱狀圖(column chart)
    chart = workbook.add_chart({"type":"column"})
    ## 配置第一個系列資料
    chart.add_series({
#         "name":"={}!${}${}".format(str_data[0],str_data[1][0],str_data[1][1]),# 設定目標頭部屬性資料
        "categories":"={}!${}${}:${}${}".format(str_data[0],str_data[1][0],str_data[1][1],str_data[2][0],str_data[2][1]),# 設定x軸的資料
        "values":"={}!${}${}:${}${}".format(str_data[0],str_data[3][0],str_data[3][1],str_data[4][0],str_data[4][1]),# 設定y軸的資料
        "line":{"color":str_data[5]},# 設定柱狀圖的外框線
    })
    # 設定圖表的標題、X軸、Y軸的資訊
    chart.set_title({"name":str_data[6]})
    chart.set_x_axis({"name":str_data[7]})
    chart.set_y_axis({"name":str_data[8]})

    ## 設定圖表風格
    chart.set_style(1)
    
    # 把圖表插入到作業表,以及設定其偏移
    worksheet.insert_chart(str_data[9],chart,{"x_offset":x_offset,"y_offset":y_offset})

繪制餅圖,用作對"支出的種類和金額"和"收入的種類和金額"的可視化呈現

餅圖和柱形圖繪制的思路是一致的,只不過選用的圖型別不一樣而已,

"支出的種類和金額"和"收入的種類和金額"的餅圖繪制的原始碼如下【含注釋,最好手動敲寫】:

# 繪制餅圖
'''
引數講解:
    sheet_name:為作業表名
    series_start_cell:為種類的資料開始
    series_end_cell:為種類的資料結束
    value_start_cell:為種類的資料體開始
    value_end_cell:為種類的資料體結束
    bar_title:為設定餅圖的標題
    tar_set_cell:為圖表安放的位置
    x_offset:設定X軸的偏移量【默認是25】
    y_offset:設定Y軸的偏移量【默認是10】
'''
def chart_pie(sheet_name,series_start_cell,series_end_cell,
              value_start_cell,value_end_cell,bar_title,tar_set_cell,x_offset=25,y_offset=10):
    
    # 將其所有輸入的引數集合在同一個串列中,統統轉換成字符型資料
    origin_data = https://www.cnblogs.com/dyxi/p/[sheet_name,series_start_cell,series_end_cell,value_start_cell,value_end_cell,bar_title,tar_set_cell]
    ## 將串列里的資料統統轉換成字符型資料
    str_data = list(map(str,origin_data))
    
    ## 創建一個餅圖(pie chart)
    chart = workbook.add_chart({"type":"pie"})
    
    ## 配置第一個系列資料
    chart.add_series({
        "categories":"={}!${}${}:${}${}".format(str_data[0],str_data[1][0],str_data[1][1],str_data[2][0],str_data[2][1]),# 獲取目標頭部屬性
        "values":"={}!${}${}:${}${}".format(str_data[0],str_data[3][0],str_data[3][1],str_data[4][0],str_data[4][1]),# 獲取里面的資料體
    })
    
    ## 設定圖表的標題的資訊
    chart.set_title({"name":str_data[5]})
    
    ## 設定圖表的風格
    chart.set_style(10)
    ## 把圖表插入到作業表,以及設定其偏移
    worksheet.insert_chart(str_data[6],chart,{"x_offset":x_offset,"y_offset":y_offset})

資料寫入

恭喜你,直到這里,對前期的資料統計和資料繪圖就結束了,現在是直接將整理好的資料寫入并繪圖了
但是要注意,這里的資料寫入是用xlsxwriter庫撰寫的,切記不可使用xlwt庫哦~

資料寫入的原始碼如下【含注釋,最好手動敲寫】:

# 一星期內容匯總

# start取記賬的開始日期,如2021-5-23
# end取記賬的結束日期,如2021-5-29
def write_pay_and_income(start,end):

    
    # 準備要寫入的資料
    ## “支出-收入-利潤”的表頭
    headings1 = ["總支出","總收入","剩余利潤"]
    ## 獲取一星期表的收入和支出的資料
    accounts_value = https://www.cnblogs.com/dyxi/p/get_pay_and_income(start,end)
    ## “支出-收入-利潤”的表體
    data1 = [accounts_value[0],accounts_value[1],accounts_value[1]-accounts_value[0]]
    
    ##"支出的種類和金額"的表頭
    headings2 = ["支出種類","支出金額"]
    ## "支出的種類和金額"的表體
    data2 = [
        list(get_pay_and_income_series(start,end)[0].keys()),
        list(get_pay_and_income_series(start,end)[0].values()),
    ]
    
    ## "收入的種類和金額"的表頭
    headings3 = ["收入種類","收入金額"]
    ## "收入的種類和金額"的表體
    data3 = [
        list(get_pay_and_income_series(start,end)[1].keys()),
        list(get_pay_and_income_series(start,end)[1].values()),
    ]
    
    # 段落樣式設計
    ## 表頭
    header_style = {
        'bold':True,
        'font_name':"微軟雅黑",
        'border':True,
        'align':'center',
        'valign':'vcenter',
        'bg_color':'yellow'
    }
    header_style_set = workbook.add_format(header_style)# 樣式添加
    ## 表體
    text_style = {
        'font_name':"微軟雅黑",
        'border':True,
        'align':'center',
        'valign':'vcenter'
    }
    text_style_set = workbook.add_format(text_style)# 樣式添加
    # 設定H列的寬度為14
    worksheet.set_column("H:H",14)
    
    # 資料寫入
    ## 單資料寫入
    worksheet.write(0,0,"一星期的收支情況分析")
    worksheet.write(0,4,"一星期的收/支出種類分析")
    worksheet.write(2,4,"支出種類",header_style_set)
    worksheet.write(3,4,"支出金額",header_style_set)
    worksheet.write(5,4,"收入種類",header_style_set)
    worksheet.write(6,4,"收入金額",header_style_set)
    
    ## 多資料寫入
    ### 寫入“支出-收入-利潤”的表頭
    worksheet.write_row("A3",headings1,header_style_set)
    ### 寫入“支出-收入-利潤”的表體
    worksheet.write_row("A4",data1,text_style_set)
    
    ### 寫入"支出的種類和金額"的表頭
    worksheet.write_row("F3",data2[0],text_style_set)
    ### 寫入"支出的種類和金額"的表體
    worksheet.write_row("F4",data2[1],text_style_set)

    ### 寫入"收入的種類和金額"的表頭
    worksheet.write_row("F6",data3[0],text_style_set)
    ### 寫入"收入的種類和金額"的表體
    worksheet.write_row("F7",data3[1],text_style_set)
    
    # 繪圖
    ## “支出-收入-利潤”的柱狀圖
    char_bar(sheet_name = "七天匯總",x_start_cell = "A3",
        x_end_cell="C3",y_start_cell = "A4",y_end_cell = "C4",out_line_color = "red",
        bar_title = "收支情況圖",bar_x_axis = "屬性",bar_y_axis = "數值",tar_set_cell="A10")

    ## "支出的種類和金額"的餅圖
    chart_pie(sheet_name = "七天匯總",series_start_cell = "F3 ",series_end_cell = "L3",
              value_start_cell = "F4",value_end_cell = "L4",bar_title = "支出種類分析",tar_set_cell="I10")

    ## "收入的種類和金額"的餅圖
    chart_pie(sheet_name = "七天匯總",series_start_cell = "F6 ",series_end_cell = "L6",
              value_start_cell = "F7",value_end_cell = "I7",bar_title = "收入種類分析",tar_set_cell="Q10")

    # 關閉檔案
    workbook.close()

自定義互動

當然以上這些都是用函式封裝好了的,如果要使用,必須要呼叫其中的函式才可以哦~

自定義互動的原始碼如下【含注釋,最好手動敲寫】:

start_time = input("開始時間:")# 設定賬單統計開始時間,這里輸入"2021-5-30"
end_time = input("結束時間:")# 設定賬單統計開始時間,這里輸入"2021-6-5"
# 確定保存檔案的路徑
save_url = "./{}到{}的匯總表.xlsx".format(start_time,end_time)
# 準備作業薄
workbook = xlsxwriter.Workbook(save_url)
# 創建sheet作業表【表名可寫可不寫,不寫默認是sheet1】
worksheet = workbook.add_worksheet("七天匯總")
write_pay_and_income(start_time,end_time)

生成.exe程式

到這里,你已經完成了核心的編碼程序,現在正是將你寫好的程式做成.exe程式吧,思路是:將.ipynb轉換成.py檔案?將.py程式生成.exe檔案,不懂的可翻閱我寫過的記賬程式1.0【重要事情不知說了幾遍了~~】

這里拋出的是將.py程式生成.exe的核心代碼,如下圖

3.png
效果圖如下:
完整效果展示.gif

結語

記賬系統2.0就算完成了,就終結了……嗎?嘻嘻,留個懸念,看自己能不能憋個大招,讓各位看官耳目一新~

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

標籤:Python

上一篇:Python爬蟲基礎講解(二十五):scrapy 框架結構

下一篇:Python基礎之變數

標籤雲
其他(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