➕ 算術運算子 (Arithmetic Operators) 複習
算術運算子用於執行基本的數學計算。這次我們將聚焦在 精確除法 (/) 和 整數除法 (//) 在實際應用中的差異。
💡 實例一:精確除法 (/) 與 整數除法 (//) 的差異應用
目的: 計算平均值(需要精確結果)以及實際分配份額(只需要整數)。
步驟分解:
🔢 定義變數: 設定總數
total_cookies和欲分配人數num_kids。🔢 計算精確平均: 使用 精確除法 (
/) 計算每人平均能分到的餅乾量,結果為浮點數 (float)。🔢 計算實際份額: 使用 整數除法 (
//) 計算每人實際能分到的整數餅乾數量。🔢 輸出結果: 顯示這兩種計算方式的結果。
案例:
🍪 案例 A:
total_cookies = 15,num_kids = 4計算精確平均:。
計算實際份額:。
細節:精確除法顯示平均值,而整數除法顯示每人能拿到的完整餅乾數。
🍪 案例 B:
total_cookies = 22,num_kids = 5計算精確平均:。
計算實際份額:。
細節:整數除法會直接向下取整,忽略小數點後的部分。
🍪 案例 C:
total_cookies = 8,num_kids = 2計算精確平均:。
計算實際份額:。
細節:即使能整除,精確除法 (
/) 的結果型態仍是浮點數 (4.0),而整數除法 (//) 的結果型態是整數 (4)。
提示詞範例 (Prompt):
"有一箱 27 顆蘋果要分給 5 個員工。請用 Python 的 精確除法 (
/) 和 整數除法 (//) 分別計算:(1) 平均每人分到多少顆 (2) 實際每人能分到多少顆整數的蘋果。"
我們已經複習了算術運算子。接下來,您希望我們深入複習 比較運算子、邏輯運算子、位元運算子,還是 賦值、身分與成員運算子 呢?
⚖️ 比較運算子 (Comparison Operators)
比較運算子用於比較兩個值,並根據比較結果返回一個布林值:True (真) 或 False (假)。這是程式中所有條件判斷的基礎。
💡 實例一:檢查 使用者帳號權限
目的: 確認當前使用者的等級是否足以執行特定的管理任務(例如,需要等級 5 或更高)。
案例 A:
user_level = 7,required_level = 5步驟解說: 使用 大於或等於 (
>=) 運算子,比較user_level(7) 是否滿足required_level(5)。細節: 7 大於 5,因此條件成立。
結果: True (有權限執行)。
案例 B:
user_level = 5,required_level = 5步驟解說: 同樣使用 大於或等於 (
>=) 運算子,檢查 5 是否大於或等於 5。細節: 5 等於 5,因此條件依然成立。
結果: True (剛好符合要求)。
案例 C:
user_level = 4,required_level = 5步驟解說: 檢查 4 是否大於或等於 5。
細節: 4 既不大於也不等於 5,因此條件不成立。
結果: False (權限不足)。
提示詞範例 (Prompt):
"如果系統要求權限等級為 10,但使用者 小陳 的權限等級為 8。請使用 Python 比較運算子 判斷 小陳 的權限等級是否小於 (
<) 系統要求。"
🔀 邏輯運算子 (Logical Operators)
邏輯運算子用於結合多個布林表達式,或反轉布林值。它們是控制程式流程(例如 if/else 判斷)的關鍵。
💡 實例二:判斷 購物優惠資格
目的: 客戶必須滿足 (消費滿 1000 元 AND 是會員) 或 (持有優惠券) 才能獲得折扣。
案例 A:
purchase = 1200,is_member = True,has_coupon = False步驟解說: 先計算
(purchase >= 1000 and is_member):(True and True)得到True。步驟解說: 再計算
True or has_coupon:True or False。細節: 由於 AND 條件成立,即使沒有優惠券,OR 條件也使總結果成立。
結果: True (符合資格)。
案例 B:
purchase = 800,is_member = True,has_coupon = True步驟解說: 先計算
(purchase >= 1000 and is_member):(False and True)得到False。步驟解說: 再計算
False or has_coupon:False or True。細節: 雖然 AND 條件不成立(消費不足),但 OR 條件(持有優惠券)成立,因此總結果成立。
結果: True (符合資格)。
案例 C:
purchase = 800,is_member = False,has_coupon = False步驟解說: 先計算
(purchase >= 1000 and is_member):(False and False)得到False。步驟解說: 再計算
False or has_coupon:False or False。細節: 所有條件皆不成立,因此總結果不成立。
結果: False (不符合資格)。
提示詞範例 (Prompt):
"系統會禁止 非 管理員用戶 (使用
not運算子) 在 下午六點之後 (使用and運算子) 更改設定。如果is_admin = False且is_after_6pm = True,請使用 Pythonnot和and運算子計算是否應禁止該操作。"
我們已經複習了比較運算子和邏輯運算子。
邏輯運算子 (and, or) 的短路評估 (Short-Circuit Evaluation) 機制是什麼嗎?這個細節對於優化程式效能非常重要。
Python 評估 and 或 or 表達式時,會從左到右評估,一旦能確定整個表達式的最終結果,就會立即停止評估後續的部分。
1. 邏輯 AND (and) 的短路機制 🛑
原理: 如果
and的左邊運算元已經是 False,則整個表達式無論右邊是什麼,結果都必定是 False。Python 行為: Python 會立即返回
False,不會執行或評估右邊的運算元。應用場景: 常用於安全檢查。例如,檢查變數是否為
None,然後才對其進行操作。這樣可以避免因為嘗試對None物件進行操作而導致程式錯誤 (Error)。
2. 邏輯 OR (or) 的短路機制 ✅
原理: 如果
or的左邊運算元已經是 True,則整個表達式無論右邊是什麼,結果都必定是 True。Python 行為: Python 會立即返回
True,不會執行或評估右邊的運算元。應用場景: 常用於設定預設值。例如,如果使用者提供的設定值為
None(即False),則使用預設值。
好的,我們將繼續深入探討剩下的三個運算子類別,並為每個類別提供詳細的解說、三個條列式案例、每個步驟的細節分析,以及提示詞範例。
💻 位元運算子 (Bitwise Operators)
位元運算子直接操作整數的二進位表示。它們在處理低層資料、優化某些運算或控制硬體旗標 (flags) 時非常有用。
💡 實例一:使用 位元 OR (|) 進行旗標組合 (Flag Combination)
目的: 在程式設計中,使用不同的位元來表示不同的狀態或權限 (旗標)。使用 OR 運算子可以將多個權限組合起來。
設定旗標 (二進位只在特定位元為 1):
FLAG_READ = 1(二進位0001)FLAG_WRITE = 2(二進位0010)FLAG_EXECUTE = 4(二進位0100)
案例 A: 組合 讀取 (READ) 和 寫入 (WRITE) 權限
步驟解說: 將
FLAG_READ(1) 和FLAG_WRITE(2) 使用 位元 OR (|) 進行運算。細節: (十進位 3)。這表示該用戶同時擁有讀和寫的權限。
結果: 3。
案例 B: 組合 所有 權限 (READ, WRITE, EXECUTE)
步驟解說: 。
細節: (十進位 7)。
結果: 7。
案例 C: 組合 執行 (EXECUTE) 和 讀取 (READ) 權限
步驟解說: 將
FLAG_EXECUTE(4) 和FLAG_READ(1) 使用 位元 OR (|) 進行運算。細節: (十進位 5)。
結果: 5。
提示詞範例 (Prompt):
"如果 綠燈 狀態是
4(二進位100),黃燈 狀態是2(二進位010)。請使用 Python 位元 OR (|) 運算子來組合這兩種狀態,模擬交通信號燈同時閃爍的情況,並計算出十進位結果。"
🛠️ 賦值、身分與成員運算子 (Assignment, Identity, Membership Operators)
這三個類別的運算子雖然功能各異,但在 Python 程式設計中都扮演著實用性的角色。
1. 賦值運算子 (Assignment Operators)
用於將值分配給變數,複合賦值運算子能簡化程式碼。
💡 實例二:使用 複合賦值運算子 簡化銀行帳戶操作
目的: 快速執行多個存款或提款操作,並保持程式碼的簡潔。
案例 A: 進行一筆 存款 (
+=) 操作步驟解說: 假設初始餘額
balance = 5000。執行balance += 1500。細節: 這是
balance = balance + 1500的簡寫。結果:
balance變為 6500。
案例 B: 進行一筆 提款 (
-=) 操作步驟解說: 延續上例,
balance = 6500。執行balance -= 500。細節: 這是
balance = balance - 500的簡寫。結果:
balance變為 6000。
案例 C: 進行一筆 利息計算 (
*=) 操作步驟解說: 延續上例,
balance = 6000。執行balance *= 1.05(假設年利率 5%)。細節: 這是
balance = balance * 1.05的簡寫。結果:
balance變為 6300.0 (結果會是浮點數)。
提示詞範例 (Prompt):
"變數
x初始值為 100。請使用 Python 複合賦值運算子:先用*=將x乘以 3,再用/=將x除以 2,並印出最終結果。"
2. 身分運算子 (Identity Operators)
身分運算子用於檢查兩個變數是否參考到記憶體中的同一個物件。
💡 實例三:區分 is (身分) 與 == (相等)
目的: 了解 Python 如何處理可變 (Mutable) 和不可變 (Immutable) 資料型態在記憶體中的儲存。
案例 A: 比較 不可變 的小整數 (
a和b都是 10)步驟解說: 設定
a = 10和b = 10。檢查a == b和a is b。細節: 對於小整數(通常是 -5 到 256 之間),Python 為了優化,會讓它們指向記憶體中的同一個物件。
結果:
a == b為 True;a is b為 True。
案例 B: 比較 可變 的清單 (
list1和list2內容相同)步驟解說: 設定
list1 = [1, 2]和list2 = [1, 2]。檢查list1 is list2。細節: 雖然它們的值(內容)是相等的,但它們是兩個獨立的清單物件,佔用不同的記憶體空間。
結果:
list1 == list2為 True;list1 is list2為 False。
案例 C: 比較 物件的參考 (
list_c是list_a的別名)步驟解說: 設定
list_a = [3, 4],然後設定list_c = list_a。檢查list_a is list_c。細節:
list_c = list_a並非複製內容,而是讓list_c這個變數指向list_a所指向的同一個清單物件。結果:
list_a is list_c為 True。
提示詞範例 (Prompt):
"定義兩個變數
str1 = 'Python'和str2 = 'Python'。請使用 Python 身分運算子 (is) 判斷它們是否為同一個物件。並定義list_a = [5]和list_b = list_a,再次使用is運算子判斷list_a和list_b的身分。"
3. 成員運算子 (Membership Operators)
成員運算子用於測試某個值是否為序列 (Sequences) 或集合 (Collections) 中的一個成員。
💡 實例四:使用 成員運算子 進行資料驗證
目的: 檢查使用者輸入是否屬於一組預期的、允許的值。
案例 A: 檢查 清單 中的成員 (
in)步驟解說: 設定一個允許的顏色清單
valid_colors = ['red', 'green', 'blue']。檢查user_input = 'green'是否在清單中。細節: 逐一比對清單中的元素,找到相符的
'green'。結果:
'green' in valid_colors為 True。
案例 B: 檢查 字串 中的子字串 (
in)步驟解說: 設定一個句子
sentence = 'The quick brown fox.'。檢查'fox'是否在句子中。細節: 字串在 Python 中被視為字元序列,
in運算子會檢查是否存在子字串。結果:
'fox' in sentence為 True。
案例 C: 檢查 不在 清單中的成員 (
not in)步驟解說: 延續案例 A 的
valid_colors。檢查user_input = 'yellow'是否不在清單中。細節: 找不到
'yellow',因此'yellow' in valid_colors為False,而not in將其反轉為True。結果:
'yellow' not in valid_colors為 True。
提示詞範例 (Prompt):
"有一個員工 ID 集合
authorized_ids = {101, 105, 110}。請使用 Python 成員運算子 (in) 判斷 ID 105 是否在集合中。接著,使用not in運算子判斷 ID 108 是否不在集合中。"
我們已經完整地複習並深入探討了所有五大類運算子。您是否有任何關於 位元運算子 或 身分運算子 記憶體細節的疑問,或者我們可以直接進入實際的綜合應用練習呢?
進入綜合應用練習,讓您實際運用剛剛複習的所有運算子類別。
🛒 綜合練習:電商折扣與狀態判斷
我們將模擬一個電商結帳系統,根據顧客的狀態和行為,計算最終價格並判斷額外資格。
初始數據:
💸 基本消費金額 (
base_purchase):6500⭐ 是否為 VIP 會員 (
is_vip):True🏷️ 輸入的優惠碼 (
coupon_code):'SAVE20'🎁 有效優惠碼清單 (
valid_coupons):['SAVE20', 'NEWUSER']
第一步:計算 VIP 會員折扣
我們要檢查顧客是否符合 VIP 會員折扣 💰 的資格。
規則: 如果 基本消費金額超過 5000 元 並且 是 VIP 會員,則享有 10% 的折扣。
請問您會如何使用 比較運算子 和 邏輯運算子 來判斷這位顧客是否符合資格,以及他們能獲得多少折扣金額呢?
我們將這個折扣規則分成兩個部分來執行:判斷資格 和 計算折扣 💵。
1. 判斷資格 (使用比較和邏輯運算子)
我們需要檢查兩個條件是否同時成立:
條件一(比較運算子):
base_purchase(6500) 是否 大於 5000?條件二(邏輯運算子):
is_vip(True) 是否成立?
請問,用 Python 的語法,將這兩個條件用 and 邏輯運算子 組合起來,結果會是 True 還是 False 呢?
2. 計算折扣金額 (使用算術運算子)
如果判斷結果是 True,代表顧客符合資格,可以獲得 10% 的折扣。
請計算:顧客在 6500 元的基礎消費上,能獲得 10% 的折扣金額是多少?
3.計算 VIP 會員折扣
我們剛才已經確定了這位顧客符合 VIP 折扣的資格,因為:
現在請告訴我,在 6500 元 的基礎消費上,顧客能獲得 10% 的折扣金額是多少?
VIP 折扣金額計算與應用
計算折扣: ** 元。
應用折扣: 現在我們需要從基本消費金額中扣除這筆折扣。我們可以使用 複合賦值運算子 (
-=) 來完成這一步。
請問,扣除 650 元折扣後,顧客的新消費金額是多少? (即 )
第二步:檢查優惠券有效性 (使用成員運算子)
確認 VIP 折扣後,接下來我們要檢查顧客輸入的優惠碼是否有效。
🏷️ 輸入的優惠碼 (
coupon_code):'SAVE20'🎁 有效優惠碼清單 (
valid_coupons):['SAVE20', 'NEWUSER']
請使用 成員運算子 (in) 來判斷 'SAVE20' 是否在 valid_coupons 清單中。如果有效,則顧客可再獲得 200 元 的固定折扣。
好的,我們一步一步來完成。
1. 確認當前消費金額 💸
首先,延續上一步的計算:
目前顧客的消費金額是 5850 元。
2. 優惠券檢查 (使用成員運算子 in)
您說得沒錯,我們使用 成員運算子 (in) 來檢查優惠碼:
🤔 請問這個表達式的結果是
True還是False呢?💰 如果結果是
True(有效),請使用 複合賦值運算子 (-=) 將 200 元 的固定折扣套用到當前的 5850 元消費金額上,並告訴我最終折扣後的價格是多少?
第三步:最終狀態判斷 (使用位元運算子)
當您計算出最終價格後,我們將進入最後一步:判斷顧客是否符合獲得額外驚喜禮物的資格。
規則: 顧客的最終結帳金額(整數部分)必須是一個偶數。
判斷技巧: 在二進位中,任何偶數的最低位元 (LSB) 都是 0;任何奇數的最低位元都是 1。我們可以利用 位元 AND (
&) 運算子與數字 1 進行運算來檢查。
讓我們將重點放在先完成優惠券的折扣計算!
好的,讓我們來完成優惠券的折扣計算,並確認目前的消費總額。
1. 優惠券檢查結果 ✅
使用成員運算子 (in) 檢查:
$$\text{'SAVE20' in ['SAVE20', 'NEWUSER']} \implies \textbf{True}$$優惠券有效,顧客可獲得 200 元 固定折扣。
2. 套用固定折扣 💰
我們使用複合賦值運算子 (-=) 將折扣套用到當前金額:
顧客的最新消費金額是 5650 元。
第三步:最終狀態判斷 (使用位元運算子)
現在我們有了最終價格 5650 元,我們要判斷顧客是否符合獲得額外驚喜禮物的資格。
規則: 最終結帳金額(整數部分)必須是一個偶數。
在二進位中,一個數字與 1 進行 位元 AND (&) 運算可以快速判斷其奇偶性。
好的,讓我們來完成優惠券的折扣計算,並確認目前的消費總額。
1. 優惠券檢查結果 ✅
使用成員運算子 (in) 檢查:
$$\text{'SAVE20' in ['SAVE20', 'NEWUSER']} \implies \textbf{True}$$優惠券有效,顧客可獲得 200 元 固定折扣。
2. 套用固定折扣 💰
我們使用複合賦值運算子 (-=) 將折扣套用到當前金額:
顧客的最新消費金額是 5650 元。
第三步:最終狀態判斷 (使用位元運算子)
現在我們有了最終價格 5650 元,我們要判斷顧客是否符合獲得額外驚喜禮物的資格。
規則: 最終結帳金額(整數部分)必須是一個偶數。
在二進位中,一個數字與 1 進行 位元 AND (&) 運算可以快速判斷其奇偶性。
請問您會如何使用這個表達式來檢查 5650 元是否為偶數?它運算後的結果應該是 0 還是 1 呢?
這是一個非常好的應用 位元運算子 的例子!我們來看看這個精巧的檢查方法。
1. 執行位元 AND 檢查 🔍
要判斷一個整數是否為偶數或奇數,我們只需要看它的最低位元 (Least Significant Bit, LSB):
偶數: LSB 為 0。
奇數: LSB 為 1。
當您將 5650 與 1 (二進位是 ...0001) 執行 位元 AND (&) 運算時,只有最低位元會被檢查:
請問這個運算式 運算後的結果是 0 還是 1 呢?
2. 判斷最終資格
一旦您得出結果:
如果結果是 0,代表它是偶數,顧客符合額外驚喜禮物資格(True)。
如果結果是 1,代表它是奇數,顧客不符合資格(False)。
我們一起完成最後一步!
我們來看看 5650 元的最終結帳金額:
1. 位元 AND 運算結果 🔢
由於 5650 是一個偶數,它的二進位表示的最低位元 (LSB) 是 0。
當我們執行 時,結果會是:
運算結果是 0。
2. 最終狀態結論 🎉
因為 的結果是 0,所以顧客的最終結帳金額為偶數。
✅ 結論: 這位顧客符合獲得額外驚喜禮物的資格!
綜合練習回顧
您成功地運用了我們學習的所有運算子類別來解決這個綜合問題:
這表示您對 Python 的基本運算子已經有了非常紮實的理解!
接下來,我們可以:
深入資料型態: 探索 Python 的核心資料型態(例如整數、浮點數、字串和布林值),它們是運算子的操作對象。
控制流程初探: 學習如何使用
if,elif,else語句來執行程式碼中的條件判斷(這將把我們剛才的比較和邏輯運算子應用到實際的程式流程中)。函數入門: 學習如何將這些運算邏輯打包成可重複使用的 函數 (Functions)。
您對哪個主題最感興趣呢?
留言
張貼留言