主頁 > 後端開發 > Python程式筆記20230304

Python程式筆記20230304

2023-04-13 07:19:54 後端開發

拋硬幣實驗

random 模塊

import random
random.randint(a, b) 回傳一個隨機整數 N,范圍是:a <= N <= b
random.choice("ilovefishc") 從 "ilovefishc" 這個字串中隨機選出一個字符,

撰寫一個雙色球的開獎模擬程式

import random

red = random.sample(range(1, 34), 6)
blue = random.randint(1, 16)

print("開獎結果是:", *red)
print("特別號碼是:", blue)

至于 *red,其實大家寫 red 也是 OK 的,就是顯示結果會多一個 “方框”:
它其實是一個 “解包” 的操作,就是將框框里面的東西拿出來的意思,

>>> print("開獎結果是:", red)
開獎結果是: [17, 24, 10, 18, 5, 6]

最初版本

import random  
  
counts = int(input("請輸入拋硬幣的次數:"))  
i = 0  
  
print("開始拋硬幣實驗:")  
while i < counts:  
    # 生成1到10的一個亂數  
    num = random.randint(1, 10)  
  
    # 如果亂數可以被2整除,則代表正面,否則代表反面  
    # num是隨機的,所以正面和反面的概率也是隨機的  
    if num % 2:  
        print("正面", end=" ")  
    else:  
        print("反面", end=" ")  
  
    i += 1

改進版本 1

  • 可以使用random.choice([True, False])來生成一個隨機的布林值,而不是使用random.randint(1, 10)和取余數的方法,
  • 可以使用for回圈來遍歷拋硬幣的次數,而不是使用while回圈和計數器,這樣可以避免出現無限回圈的風險,也可以讓代碼更清晰,
  • 可以使用print()函式的sep引數來指定輸出的分隔符,而不是在每個字串后面加上空格,這樣可以讓代碼更簡潔,也可以方便地修改分隔符,
import random

counts = int(input("請輸入拋硬幣的次數:"))

print("開始拋硬幣實驗:")
for i in range(counts):
    # 生成一個隨機的布林值
    num = random.choice([True, False])

    # 如果布林值為真,則代表正面,否則代表反面
    if num:
        print("正面", end="")
    else:
        print("反面", end="")

    # 使用逗號作為分隔符,sep和end都沒有數值
    print(",", sep="", end="")

# 輸出換行符
print()

改進版本 2

  • 可以使用try...except陳述句來處理可能出現的例外,比如輸入的不是一個整數,或者輸入的是一個負數,
  • 可以使用f-string來格式化輸出的字串,而不是使用+或者,來拼接字串,可以讓代碼更簡潔,也可以方便地插入變數或者運算式,
  • 可以使用list comprehension來生成一個包含所有拋硬幣結果的串列,而不是在回圈中逐個輸出,可以代碼更高效,也可以方便地對結果進行分析,
import random  
  
while True:  
    try:  
        num_flips = int(input("請輸入拋硬幣的次數:"))  
        if num_flips <= 0:  
            raise ValueError("輸入的次數必須是正整數")  
        break  
    except ValueError as e:  
        print("輸入的不是一個正整數,請重新輸入")  
        print(f"錯誤資訊:{str(e)}\n")  
  
print(f"開始拋{num_flips}次硬幣實驗:")  
  
results = [random.choice(["正面", "反面"]) for _ in range(num_flips)]  
# results = ["正面" if random.choice([True, False]) else "反面" for i in range(num_flips)]  
  
print(*results, sep=", ")  
# 試試看不加*號 print(results, sep=" ")
# 使用f-string格式化輸出結果,并用逗號分隔,這種輸出和上面一致  
print(f"{', '.join(results)}")  
  
print(f"實驗結束,正面的次數為{results.count('正面')},反面的次數為{results.count('反面')}")

這個改進后的代碼使用了 try...except 陳述句來捕獲可能出現的例外,比如輸入的不是一個整數或者輸入的是一個負數,如果出現這些例外,程式會給出相應的錯誤提示,并讓用戶重新輸入,此外,代碼還使用了 f-string 來格式化輸出的字串,以及使用串列推導式來生成一個包含所有拋硬幣結果的串列,這樣可以使代碼更加簡潔和高效,最后,代碼還列印了正面和反面出現的次數,以方便用戶對結果進行分析,

try...except 陳述句用于捕獲和處理例外,其邏輯順序如下:

  1. 首先執行try代碼塊中的陳述句,
  2. 如果在執行try代碼塊時沒有發生例外,就跳過except陳述句并繼續執行后面的代碼,
  3. 如果在執行try代碼塊時發生了例外,Python會尋找與例外匹配的except陳述句,并執行其中的代碼塊,如果沒有匹配的except陳述句,例外會繼續向上拋出,直到被處理或者導致程式崩潰,
  4. 無論try代碼塊是否發生例外,都會執行finally代碼塊中的陳述句,

語法分析 1

results = [random.choice(["正面", "反面"]) for _ in range(num_flips)] results = ["正面" if random.choice([True, False]) else "反面" for i in range(num_flips)]

這兩者的區別不大,都是使用串列推導式來生成一個包含所有拋硬幣結果的串列,不過,第一種方法是直接從一個包含"正面"和"反面"的串列中隨機選擇一個元素,而第二種方法是先生成一個隨機的布林值,然后根據布林值來選擇"正面"或者"反面",第一種方法可能更簡單一些,第二種方法可能更接近實際的拋硬幣程序,不過,從效果上來看,兩者都可以得到相同的結果,

在 Python 中,下劃線 _ 通常用作一個臨時變數名,表示一個值是被忽略的,在這個代碼中,我們并不需要使用串列推導式中的回圈計數器,而是只需要使用它來控制回圈的次數,因此使用下劃線來表示這個變數是被忽略的,只是為了滿足語法要求,使用下劃線作為臨時變數名的好處是,它能夠提高代碼的可讀性和可維護性,避免了使用無意義的變數名所帶來的混淆和錯誤

當運行第一個代碼時,會發生以下事情:

  1. 首先,Python會讀取這個串列推導式,這個串列推導式由方括號括起來,看起來很像一個串列,串列推導式的基本語法是在方括號中使用for回圈和一個運算式,用于生成一個新的串列,
  2. 在for回圈中,代碼使用range(num_flips)生成一個數字序列,其中num_flips是你輸入的拋硬幣次數,這個數字序列包含從0到num_flips-1的所有整數,
  3. 然后,代碼對這個數字序列進行回圈,每次回圈都會將當前的數字賦值給變數i,這個變數在這個串列推導式中沒有用到,因此我們使用下劃線(_)表示這個變數不需要,
  4. 在回圈內部,代碼使用random.choice([True, False])生成一個隨機布林值,隨機地選擇True或False,注意,這里使用了串列[True, False],而不是范圍(1,10),這是因為串列中只有兩個元素,True和False,因此這里使用了布林值作為串列元素,
  5. 接著,代碼使用條件運算式"正面" if random.choice([True, False]) else "反面",根據隨機布林值來生成"正面"或"反面",如果隨機布林值是True,則運算式的結果是"正面";如果隨機布林值是False,則運算式的結果是"反面",
  6. 最后,代碼將每次回圈生成的"正面"或"反面"字串添加到一個新的串列中,并將這個串列作為串列推導式的輸出結果回傳,

語法分析 2

raise ValueError("輸入的次數必須是正整數") `

raise 是 Python 中的一種陳述句,用于手動引發例外,在這個例子中,當 num_flips 小于或等于零時,我們希望引發一個 ValueError 例外,以便提醒用戶輸入無效,使用 raise 陳述句可以在代碼執行到這個位置時,立即引發例外并停止程式的運行, raise 的語法如下:
raise [Exception [, args [, traceback]]]
其中 Exception 是例外的型別,可以是內置的例外型別(例如 ValueError)或自定義的例外型別,args 是一個包含例外引數的元組,可以省略,traceback 是一個可選引數,包含了例外的堆疊跟蹤資訊,通常不需要手動指定,

except ValueError as e: `

在這段陳述句中,as 是用來將 ValueError 例外賦值給變數 e,這樣就可以在后面的代碼中使用這個變數來獲取例外的詳細資訊,
通常情況下,我們會在例外處理中使用 as 來捕獲例外并給它起一個更具描述性的名字,以便更好地理解和處理它,

print(f"錯誤資訊:{str(e)}\n") `

{str(e)}\n 是一個 f-string 運算式,用來格式化輸出字串,
{}用于插入運算式的值,str(e)用于將例外物件e轉換為字串,\n用于在字串末尾添加一個換行符,

語法分析 3

print(f"{', '.join(results)}")

f-string是一種字串格式化方式,可以在字串中插入變數和運算式,在這個例子中,我們使用了f-string來格式化輸出字串,其中花括號內部的部分會被替換成對應變數或者運算式的值,例如,{', '.join(results)}中的{}表示插入一個變數,join()方法是Python字串物件的一個方法,它接受一個可迭代物件作為引數,將這個可迭代物件中的字串元素連接成一個字串,并回傳這個字串,

改進版本 3

增加統計正面和反面的比例功能
使用 count 方法來統計串列中某個元素出現的次數,然后用 len 方法來獲取串列的長度,再用除法來計算比例:

# 統計正面出現的次數
positive = results.count("正面")
# 統計反面出現的次數
negative = results.count("反面")
# 計算正面的比例
positive_ratio = positive / len(results)
# 計算反面的比例
negative_ratio = negative / len(results)
# 使用f-string格式化輸出比例,并保留兩位小數
print(f"正面的比例是{positive_ratio:.2f},反面的比例是{negative_ratio:.2f}")

改進版本 4

import random  
import matplotlib.pyplot as plt  
  
while True:  
    try:  
        num_flips = int(input("請輸入拋硬幣的次數:"))  
        if num_flips <= 0:  
            raise ValueError("輸入的次數必須是正整數")  
        break  
    except ValueError as e:  
        print("輸入的不是一個正整數,請重新輸入")  
        print(f"錯誤資訊:{str(e)}\n")  
  
print(f"開始拋{num_flips}次硬幣實驗:")  
  
results = [random.choice(["正面", "反面"]) for _ in range(num_flips)]  
# results = ["正面" if random.choice([True, False]) else "反面" for i in range(num_flips)]  
  
print(*results, sep=", ")  
# 試試看不加*號 print(results, sep=" ")
# 使用f-string格式化輸出結果,并用逗號分隔,這種輸出和上面一致  
print(f"{', '.join(results)}")  
# 統計正面反面出現的次數  
num_heads = results.count("正面")  
num_tails = num_flips - num_heads  
# 計算正面反面出現的比例  
ratio_heads = num_heads / num_flips  
ratio_tails = num_tails / num_flips  
# 也可以用len(results) = num_flips  
  
print(f"實驗結束,正面的次數為{num_heads},反面的次數為{num_tails}")  
# 使用f-string格式化輸出比例,并保留兩位小數  
print(f"實驗結果中,正面的比例是{ratio_heads:.2f},反面的比例是{ratio_tails:.2f}")  
  
# 設定中文顯示  
plt.rcParams["font.sans-serif"] = ["SimHei"]  
# 設定正常顯示負號  
plt.rcParams["axes.unicode_minus"] = False  
  
fig, axs = plt.subplots(3, figsize=(8, 12))  
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, hspace=0.4, wspace=0.4)
  
# 繪制餅圖  
axs[0].pie([num_heads, num_tails], labels=["正面", "反面"], colors=["green", "red"], autopct='%1.1f%%', startangle=90)  
axs[0].axis("equal")  
axs[0].set_title(f"{num_flips}次硬幣拋擲結果(餅圖)")  
  
# 繪制柱狀圖  
axs[1].bar(["正面", "反面"], [num_heads, num_tails], color=["green", "red"])  
axs[1].set_ylim(0, num_flips)  
axs[1].set_xlabel("面向")  
axs[1].set_ylabel("次數")  
axs[1].set_title(f"{num_flips}次硬幣拋擲結果(柱狀圖)")  
  
# 繪制折線圖  
x_values = range(1, num_flips+1)  
y_values = [results[:i].count("正面") / i for i in x_values]  
axs[2].plot(x_values, y_values)  
axs[2].set_ylim(0, 1)  
axs[2].set_xlabel("拋擲次數")  
axs[2].set_ylabel("正面比例")  
axs[2].set_title(f"{num_flips}次硬幣拋擲結果(折線圖)")  
  
plt.show()

代碼分析 1

axs[0].pie([num_heads, num_tails], labels=["正面", "反面"], autopct='%1.1f%%', startangle=90)  
axs[0].axis("equal")  
axs[0].set_title(f"{num_flips}次硬幣拋擲結果(餅圖)") 
  • axs[0] 表示第一個子圖;
  • [num_heads, num_tails] 是資料,labels=["正面", "反面"] 是標簽;
  • autopct='%1.1f%%' 表示設定百分比格式;
    autopct 是一個用來標記餅圖每一塊的數值的引數,它可以是一個字串或者一個函式,如果是一個字串,它必須是一個格式化字串,用來顯示每一塊的百分比,如果是一個函式,它必須接受一個數值作為輸入,并回傳一個字串作為輸出,
    '%1.1 f%%' 是一個格式化字串,它的意思是顯示一位小數的浮點數,并在后面加上百分號,例如,如果一塊的百分比是 12.34%,那么它會顯示為'12.3%',
    '%1.1f%%' 中的三個百分號的作用如下:
    • 第一個百分號是用來表示這是一個格式化字串的標志,
    • 第二個百分號是用來表示這是一個浮點數的型別符號,
    • 第三個百分號是用來表示在數值后面加上一個百分號的轉義符號,
      '%1.1f%%' 中的 1.1 是用來表示浮點數的精度的,它的意思是顯示一位整數和一位小數,如果想要顯示兩位整數和兩位小數,你可以寫成'%2.2f%%'
  • startangle=90 表示設定起始角度為90度
  • axis("equal") 表示設定坐標軸相等,保證餅圖是圓形
  • set_title(f"{num_flips}次硬幣拋擲結果(餅圖)") 表示設定子圖示題

代碼分析 2

axs[1].bar(["正面", "反面"], [num_heads, num_tails])  
axs[1].set_ylim(0, num_flips)  
axs[1].set_xlabel("面向")  
axs[1].set_ylabel("次數")  
axs[1].set_title(f"{num_flips}次硬幣拋擲結果(柱狀圖)")  
  • axs[1] 表示第二個子圖
  • bar 表示繪制柱狀圖, ["正面", "反面"] 是標簽,[num_heads, num_tails] 是資料
  • set_ylim(0, num_flips) 表示設定 y 軸范圍,y 軸從 0 開始,最大值為 num_flips
  • set_xlabel("面向") 表示設定 x 軸標簽為 "面向"
  • set_ylabel("次數") 表示設定 y 軸標簽為 "次數"
  • set_title(f"{num_flips}次硬幣拋擲結果(柱狀圖)") 表示設定子圖示題

代碼分析 3

x_values = range(1, num_flips+1)  
y_values = [results[:i].count("正面") / i for i in x_values]  
axs[2].plot(x_values, y_values)  
axs[2].set_ylim(0, 1)  
axs[2].set_xlabel("拋擲次數")  
axs[2].set_ylabel("正面比例")  
axs[2].set_title(f"{num_flips}次硬幣拋擲結果(折線圖)")  
  • 生成一個數字序列,表示1到 num_flips 的數字,
  • 使用串列推導式計算出每個拋擲次數的正面比例,存盤在 y_values 中,
    • 串列推導式(list comprehension)的語法,根據一個已有的串列(x_values)生成一個新的串列(y_values),并對每個元素進行一定的操作或過濾,
    • 串列推導式的一般形式是:[expression for item in iterable if condition],其中,expression 是對每個 item 進行的操作,iterable 是一個可迭代的物件,如串列、元組、字串等,condition 是一個可選的過濾條件,只有滿足條件的 item 才會被處理,
    • 在這個例子中,expressionresults[:i].count("正面") / i,它的意思是對結果串列(results)進行切片,取前 i 個元素,然后計算其中"正面"的個數,并除以 i,得到正面的比例,iterablex_values,它是一個從1到 num_flips 的數字序列,沒有使用過濾條件,
  • results[:i] 是一個串列切片(list slicing)的語法,
    • 它的作用是從一個串列(results)中取出一部分元素,形成一個新的串列,
    • 串列切片的一般形式是:list[start:stop:step]
    • 其中,start 是切片的起始位置,stop 是切片的結束位置(不包含),step 是切片的步長,如果省略 start,則默認為0,表示從串列的第一個元素開始,如果省略 stop,則默認為串列的長度,表示到串列的最后一個元素結束,如果省略 step,則默認為1,表示每個元素都取,
    • 在這個例子中,results[:i] 省略了 startstep,只指定了 stop 為 i,所以它的意思是從結果串列(results)中取出從第一個元素到第 i 個元素(不包含)之間的所有元素,形成一個新的串列,
    • 如果你想要從第二個元素到倒數第二個元素之間的所有元素,你可以寫成 results[1:-1],這里,start 是1,表示從串列的第二個元素開始(因為串列的索引是從0開始的),stop 是-1,表示到串列的倒數第一個元素的前一個元素結束(因為負數表示從串列的末尾往前數),step 省略了,表示每個元素都取,
    • 如果你想要從第一個元素到最后一個元素之間的每隔兩個元素取一個,你可以寫成 results[::2],這里,startstop 都省略了,表示從串列的第一個元素到最后一個元素,step 是2,表示每隔兩個元素取一個,
    • 如果你想要反轉串列的順序,你可以寫成 results[::-1],這里,startstop都省略了,表示從串列的第一個元素到最后一個元素,step是-1,表示從串列的末尾往前數,每個元素都取,
  • axs[2].plot 繪制折線圖,將數字序列 x_values 和正面比例 y_values 作為引數傳入,
  • axs[2].set_ylim 設定 y 軸的范圍,最小為0,最大為1,
  • axs[2].set_xlabelaxs[2].set_ylabel 方法分別設定 x 軸和 y 軸的標簽,
  • axs[2].set_title 設定圖表的標題

你可以通過設定 plot 方法的一些引數來改變折線圖的樣式,例如,你可以設定 color 引數來改變線條的顏色,設定 linestyle 引數來改變線條的樣式,設定 marker 引數來改變資料點的標記,設定 linewidth 引數來改變線條的寬度等,
你也可以使用不同的樣式表(style sheet)來改變整個圖表的風格,樣式表是一組預定義的樣式引數,可以讓你快速地切換不同的主題和色彩,Matplotlib提供了一些內置的樣式表,你可以使用plt.style.use方法來選擇一個樣式表,
例如,你可以使用這樣的代碼來改變折線圖的樣式:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

# 使用ggplot樣式表
plt.style.use('ggplot')

# 繪制折線圖,并設定顏色為綠色,線條樣式為虛線,資料點標記為圓圈,線條寬度為2
plt.plot(x, y, color='green', linestyle='--', marker='o', linewidth=2)

plt.show()

可以使用這樣的代碼來添加圖例和網格線:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 繪制兩條折線,并設定標簽
plt.plot(x, y1, label='sin')
plt.plot(x, y2, label='cos')

# 添加圖例,并設定位置為右上角
plt.legend(loc='upper right')

# 添加網格線,并設定顏色為灰色,線條樣式為虛線
plt.grid(color='gray', linestyle='--')

plt.show()

代碼分析 4

fig, axs = plt.subplots(3, figsize=(8, 12))  
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, hspace=0.4, wspace=0.4)

fig, axs = plt.subplots(3, figsize=(8, 12)) 是一種用于創建一個圖形和三個子圖的快捷方式,
每個子圖都有一個 axs 物件,可以用來繪制資料或調整樣式,

調整子圖之間的間距,可以使用 fig.tight_layout() 或者 fig.subplots_adjust() 方法,
這些方法可以根據子圖的大小和標簽自動或手動地調整間距,以避免重疊,

hspacewspace 是用來調整子圖之間的水平和垂直間距的引數,
它們的值是子圖的寬度或高度的百分比,如果想要讓子圖之間的水平間距更大,可以設定 wspace=0.6 或更高的值,

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

fig, axs = plt.subplots(3, figsize=(8, 12))
fig.suptitle('Three subplots with different labels')

for i in range(3):
    axs[i].plot(x, y)
    axs[i].set_xlabel(f'x{i}')
    axs[i].set_ylabel(f'y{i}')

# Adjust the spacing between subplots
fig.tight_layout()
# Or you can use fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, hspace=0.4, wspace=0.4)

plt.show()

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

標籤:Python

上一篇:【manim影片教程】--常用影片效果

下一篇: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