➕Python 基礎篇:基本語法與符號~邱允文
12月 07, 2025 ➕Python 基礎篇:基本語法與符號~邱允文
➕ 算術運算子 (Arithmetic Operators) 複習
算術運算子用於執行基本的數學計算。這次我們將聚焦在 精確除法 (/) 和 整數除法 (//) 在實際應用中的差異。💡 實例一:精確除法 (/) 與 整數除法 (//) 的差異應用
目的: 計算平均值(需要精確結果)以及實際分配份額(只需要整數)。
- 🔢 定義變數: 設定總數 total_cookies 和欲分配人數 num_kids。
- 🔢 計算精確平均: 使用 精確除法 (/) 計算每人平均能分到的餅乾量,結果為浮點數 (float)。
- 🔢 計算實際份額: 使用 整數除法 (//) 計算每人實際能分到的整數餅乾數量。
- 🔢 輸出結果: 顯示這兩種計算方式的結果。
案例:
- 🍪 案例 A: total_cookies = 15, num_kids = 4
- 計算精確平均:15/4=∗∗3.75∗∗。
- 計算實際份額:15//4=∗∗3∗∗。
- 細節:精確除法顯示平均值,而整數除法顯示每人能拿到的完整餅乾數。
- 🍪 案例 B: total_cookies = 22, num_kids = 5
- 計算精確平均:22/5=∗∗4.4∗∗。
- 計算實際份額:22//5=∗∗4∗∗。
- 細節:整數除法會直接向下取整,忽略小數點後的部分。
- 🍪 案例 C: total_cookies = 8, num_kids = 2
- 計算精確平均:8/2=∗∗4.0∗∗。
- 計算實際份額:8//2=∗∗4∗∗。
- 細節:即使能整除,精確除法 (/) 的結果型態仍是浮點數 (4.0),而整數除法 (//) 的結果型態是整數 (4)。
提示詞範例 (Prompt):
"有一箱 27 顆蘋果要分給 5 個員工。請用 Python 的 精確除法 (/) 和 整數除法 (//) 分別計算:(1) 平均每人分到多少顆 (2) 實際每人能分到多少顆整數的蘋果。"
我們已經複習了算術運算子。接下來,您希望我們深入複習 比較運算子、邏輯運算子、位元運算子,還是 賦值、身分與成員運算子 呢?
⚖️ 比較運算子 (Comparison Operators)
比較運算子用於比較兩個值,並根據比較結果返回一個布林值:True (真) 或 False (假)。這是程式中所有條件判斷的基礎。
運算子
說明
==
檢查兩值是否相等 (Equal to)
!=
檢查兩值是否不相等 (Not equal to)
>
檢查左值是否大於右值 (Greater than)
<
檢查左值是否小於右值 (Less than)
>=
檢查左值是否大於或等於右值 (Greater than or equal to)
<=
檢查左值是否小於或等於右值 (Less than or equal to)
匯出到試算表
💡 實例一:檢查 使用者帳號權限
目的: 確認當前使用者的等級是否足以執行特定的管理任務(例如,需要等級 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 判斷)的關鍵。
運算子
說明
and
邏輯且:兩邊都為 True,結果才為 True。
or
邏輯或:只要一邊為 True,結果就為 True。
not
邏輯非:將結果反轉 (True 變 False,False 變 True)。
匯出到試算表
💡 實例二:判斷 購物優惠資格
目的: 客戶必須滿足 (消費滿 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,請使用 Python not 和 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) 時非常有用。
運算子
說明
&
位元 AND:兩位元皆為 1,結果才為 1。
|
位元 OR:任一位元為 1,結果就為 1。
^
位元 XOR (互斥或):兩位元不同,結果才為 1。
<<
左移:向左移動 n 位,相當於乘以 2n。
>>
右移:向右移動 n 位,相當於整數除以 2n。
匯出到試算表
💡 實例一:使用 位元 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 (|) 進行運算。
- 細節: 0001∣0010=0011 (十進位 3)。這表示該用戶同時擁有讀和寫的權限。
- 結果: 3。
- 案例 B: 組合 所有 權限 (READ, WRITE, EXECUTE)
- 步驟解說: FLAG_READ∣FLAG_WRITE∣FLAG_EXECUTE。
- 細節: 0001∣0010∣0100=0111 (十進位 7)。
- 結果: 7。
- 案例 C: 組合 執行 (EXECUTE) 和 讀取 (READ) 權限
- 步驟解說: 將 FLAG_EXECUTE (4) 和 FLAG_READ (1) 使用 位元 OR (|) 進行運算。
- 細節: 0100∣0001=0101 (十進位 5)。
- 結果: 5。
提示詞範例 (Prompt):
"如果 綠燈 狀態是 4 (二進位 100),黃燈 狀態是 2 (二進位 010)。請使用 Python 位元 OR (|) 運算子來組合這兩種狀態,模擬交通信號燈同時閃爍的情況,並計算出十進位結果。"
🛠️ 賦值、身分與成員運算子 (Assignment, Identity, Membership Operators)
這三個類別的運算子雖然功能各異,但在 Python 程式設計中都扮演著實用性的角色。
1. 賦值運算子 (Assignment Operators)
用於將值分配給變數,複合賦值運算子能簡化程式碼。
運算子
說明
+=
加法賦值:a = a + b
-=
減法賦值:a = a - b
*=
乘法賦值:a = a * b
/=
除法賦值:a = a / b
匯出到試算表
💡 實例二:使用 複合賦值運算子 簡化銀行帳戶操作
目的: 快速執行多個存款或提款操作,並保持程式碼的簡潔。
- 案例 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
如果兩個變數指向同一個物件,則傳回 True。
is not
如果兩個變數不指向同一個物件,則傳回 True。
匯出到試算表
💡 實例三:區分 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) 中的一個成員。
運算子
說明
in
檢查值是否存在於序列或集合中,存在則傳回 True。
not in
檢查值是否不存在於序列或集合中,不存在則傳回 True。
匯出到試算表
💡 實例四:使用 成員運算子 進行資料驗證
目的: 檢查使用者輸入是否屬於一組預期的、允許的值。
- 案例 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 > 5000) \quad \text{and} \quad (\text{is\_vip} = \text{True}) \implies \text{True}$$
現在請告訴我,在 6500 元 的基礎消費上,顧客能獲得 10% 的折扣金額是多少?
VIP 折扣金額計算與應用
- 計算折扣: 6500×0.10=∗∗650** 元。
- 應用折扣: 現在我們需要從基本消費金額中扣除這筆折扣。我們可以使用 複合賦值運算子 (-=) 來完成這一步。
base_purchase−=650
請問,扣除 650 元折扣後,顧客的新消費金額是多少? (即 6500−650)
第二步:檢查優惠券有效性 (使用成員運算子)
確認 VIP 折扣後,接下來我們要檢查顧客輸入的優惠碼是否有效。
- 🏷️ 輸入的優惠碼 (coupon_code):'SAVE20'
- 🎁 有效優惠碼清單 (valid_coupons):['SAVE20', 'NEWUSER']
請使用 成員運算子 (in) 來判斷 'SAVE20' 是否在 valid_coupons 清單中。如果有效,則顧客可再獲得 200 元 的固定折扣。
好的,我們一步一步來完成。
1. 確認當前消費金額 💸
首先,延續上一步的計算:
$$\text{base\_purchase} = 6500 - 650 = **5850**$$
目前顧客的消費金額是 5850 元。
2. 優惠券檢查 (使用成員運算子 in)
您說得沒錯,我們使用 成員運算子 (in) 來檢查優惠碼:
$$\text{'SAVE20' in valid\_coupons}$$
- 🤔 請問這個表達式的結果是 True 還是 False 呢?
- 💰 如果結果是 True(有效),請使用 複合賦值運算子 (-=) 將 200 元 的固定折扣套用到當前的 5850 元消費金額上,並告訴我最終折扣後的價格是多少?
第三步:最終狀態判斷 (使用位元運算子)
當您計算出最終價格後,我們將進入最後一步:判斷顧客是否符合獲得額外驚喜禮物的資格。
- 規則: 顧客的最終結帳金額(整數部分)必須是一個偶數。
- 判斷技巧: 在二進位中,任何偶數的最低位元 (LSB) 都是 0;任何奇數的最低位元都是 1。我們可以利用 位元 AND (&) 運算子與數字 1 進行運算來檢查。
讓我們將重點放在先完成優惠券的折扣計算!
好的,讓我們來完成優惠券的折扣計算,並確認目前的消費總額。
1. 優惠券檢查結果 ✅
- 使用成員運算子 (in) 檢查:
$$\text{'SAVE20' in ['SAVE20', 'NEWUSER']} \implies \textbf{True}$$
- 優惠券有效,顧客可獲得 200 元 固定折扣。
2. 套用固定折扣 💰
我們使用複合賦值運算子 (-=) 將折扣套用到當前金額:
$$\text{當前金額} = 5850 - 200 = **5650**$$
- 顧客的最新消費金額是 5650 元。
第三步:最終狀態判斷 (使用位元運算子)
現在我們有了最終價格 5650 元,我們要判斷顧客是否符合獲得額外驚喜禮物的資格。
- 規則: 最終結帳金額(整數部分)必須是一個偶數。
在二進位中,一個數字與 1 進行 位元 AND (&) 運算可以快速判斷其奇偶性。
$$\text{Final\_Price} \quad \& \quad 1$$
好的,讓我們來完成優惠券的折扣計算,並確認目前的消費總額。
1. 優惠券檢查結果 ✅
- 使用成員運算子 (in) 檢查:
$$\text{'SAVE20' in ['SAVE20', 'NEWUSER']} \implies \textbf{True}$$
- 優惠券有效,顧客可獲得 200 元 固定折扣。
2. 套用固定折扣 💰
我們使用複合賦值運算子 (-=) 將折扣套用到當前金額:
$$\text{當前金額} = 5850 - 200 = **5650**$$
- 顧客的最新消費金額是 5650 元。
第三步:最終狀態判斷 (使用位元運算子)
現在我們有了最終價格 5650 元,我們要判斷顧客是否符合獲得額外驚喜禮物的資格。
- 規則: 最終結帳金額(整數部分)必須是一個偶數。
在二進位中,一個數字與 1 進行 位元 AND (&) 運算可以快速判斷其奇偶性。
$$\text{Final\_Price} \quad \& \quad 1$$
請問您會如何使用這個表達式來檢查 5650 元是否為偶數?它運算後的結果應該是 0 還是 1 呢?
這是一個非常好的應用 位元運算子 的例子!我們來看看這個精巧的檢查方法。
1. 執行位元 AND 檢查 🔍
要判斷一個整數是否為偶數或奇數,我們只需要看它的最低位元 (Least Significant Bit, LSB):
- 偶數: LSB 為 0。
- 奇數: LSB 為 1。
當您將 5650 與 1 (二進位是 ...0001) 執行 位元 AND (&) 運算時,只有最低位元會被檢查:
5650 (Even: ...0)&1 (...1)
請問這個運算式 5650 & 1 運算後的結果是 0 還是 1 呢?
2. 判斷最終資格
一旦您得出結果:
- 如果結果是 0,代表它是偶數,顧客符合額外驚喜禮物資格(True)。
- 如果結果是 1,代表它是奇數,顧客不符合資格(False)。
我們一起完成最後一步!
我們來看看 5650 元的最終結帳金額:
1. 位元 AND 運算結果 🔢
- 由於 5650 是一個偶數,它的二進位表示的最低位元 (LSB) 是 0。
- 當我們執行 5650 & 1 時,結果會是:
...0&1⟹0
- 運算結果是 0。
2. 最終狀態結論 🎉
- 因為 5650 & 1 的結果是 0,所以顧客的最終結帳金額為偶數。
- ✅ 結論: 這位顧客符合獲得額外驚喜禮物的資格!
綜合練習回顧
您成功地運用了我們學習的所有運算子類別來解決這個綜合問題:
運算子類別
用途
實際操作
比較 (>)
判斷消費金額是否超過 5000 元。
邏輯 (and)
組合 VIP 狀態和消費金額兩個條件。
算術 (*, -)
計算 10% 的折扣。
賦值 (-=)
應用 VIP 折扣和 200 元優惠券折扣。
成員 (in)
檢查優惠碼是否在有效清單中。
位元 (&)
快速檢查最終金額的奇偶性。
匯出到試算表
這表示您對 Python 的基本運算子已經有了非常紮實的理解!
接下來,我們可以:
- 深入資料型態: 探索 Python 的核心資料型態(例如整數、浮點數、字串和布林值),它們是運算子的操作對象。
- 控制流程初探: 學習如何使用 if, elif, else 語句來執行程式碼中的條件判斷(這將把我們剛才的比較和邏輯運算子應用到實際的程式流程中)。
- 函數入門: 學習如何將這些運算邏輯打包成可重複使用的 函數 (Functions)。
您對哪個主題最感興趣呢?


