---
type:slide
---
## Week 5 - Python Chapter 2. Operators, Truthy and Falsy
### Python 運算子、真值與假值
#### 目標:學習 Python 中不同類型的運算子,理解真值 (Truthy) 與假值 (Falsy) 的概念
#### colab link
---
### **運算子介紹**
* #### 定義:運算子 (Operator) 是對資料進行操作的符號或關鍵字。
* #### 範例:在 4 + 5 = 9 中,4 和 5 是操作元 (Operands),而 + 是運算子 (Operator)。
---
## 練習題
假設你是小鎮的收銀員,每天要計算賣出商品的總額。給定兩個商品的價格:
- `item1 = 23`
- `item2 = 45`
請使用不同的運算子來計算以下內容:
1. 兩商品的總價
2. 兩商品的價差
3. 若每件商品多賣 10 件,計算新總額
---
### 解答:
```python
# 1. 兩商品的總價
item1 = 23
item2 = 45
total_price = item1 + item2
print("兩商品的總價:", total_price) # 68
# 2. 兩商品的價差
price_difference = abs(item1 - item2)
print("兩商品的價差:", price_difference) # 22
# 3. 若每件商品多賣 10 件,計算新總額
item1_quantity = 10
item2_quantity = 10
new_total = (item1 * item1_quantity) + (item2 * item2_quantity)
print("新總額:", new_total) # 680
```
---
## 算術運算子 (Arithmetic Operators)
### Python 支援的基本算術運算子:
- `+`:加法
- `-`:減法
- `*`:乘法
- `/`:除法
- `%`:取餘
- `**`:次方
---
### 範例:
```python
a = 10
b = 2
print(a + b) # 12
print(a ** b) # 100 (10^2)
```
---
### 練習題:
寫一個程式計算一個長方形的周長和面積。假設:
- `length = 10`
- `width = 5`
請使用加法、乘法和指數運算符來計算答案。
---
### 解答:
```python
# 定義長方形的長和寬
length = 10
width = 5
# 計算周長
perimeter = 2 * (length + width)
print("長方形的周長:", perimeter) # 30
# 計算面積
area = length * width
print("長方形的面積:", area) # 50
```
---
## 成員運算子 (Membership Operators)
### Python 支援的成員運算子:
- `in`:檢查元素是否存在於集合中。
- `not in`:檢查元素是否不存在於集合中。
---
### 範例:
```python
fruits = ["apple", "banana"]
print("apple" in fruits) # True
print("grape" not in fruits) # True
```
---
### 練習題:
一個魔術師給你一組單字清單 `["rabbit", "hat", "wand", "cape"]`,他說:「如果清單中有 `wand` 就能施展魔法!」。請檢查清單中是否有 `wand`,並告訴魔術師答案。
---
### 解答:
```python
# 定義單字清單
items = ["rabbit", "hat", "wand", "cape"]
# 檢查清單中是否有 "wand"
if "wand" in items:
print("清單中有 'wand',可以施展魔法!")
else:
print("清單中沒有 'wand',無法施展魔法。")
```
---
## 比較運算子(Comparison Operators)
### 比較兩個操作元,返回布林值 `True` 或 `False`:
- `==`:等於
- `!=`:不等於
- `>`:大於
- `<`:小於
- `>=`:大於等於
- `<=`:小於等於
---
### 範例:
```python
a = 10
b = 5
print(a > b) # True
```
---
## 比較運算子 (Comparison Operators)
### 練習題:
你需要幫助一位園丁檢查果園的蘋果是否比梨子多。給定:
- `apples = 30`
- `pears = 25`
使用比較運算符確認蘋果是否比梨子多,並輸出相應訊息。
---
### 解答:
```python
# 定義蘋果和梨子的數量
apples = 30
pears = 25
# 檢查蘋果是否比梨子多
if apples > pears:
print("蘋果比梨子多。")
else:
print("蘋果不比梨子多。")
```
---
## 賦值運算子 (Assignment Operators)
### 賦值運算子用於將值指派給變數:
- `=`:賦值
- `+=`:加後賦值
- `-=`:減後賦值
- `*=`:乘後賦值
- `/=`:除後賦值
- `**=`:次方後賦值
---
### 範例:
```python
x = 5
x += 3
print(x) # 8
```
---
### 練習題:
你有 `coins = 10`,每次遊戲中獲勝會增加 5 枚硬幣。假設連贏了 3 場遊戲,請使用適當的賦值運算子來計算你最終的硬幣數量。
---
### 解答:
```python
# 初始硬幣數量
coins = 10
# 每場遊戲獲勝增加 5 枚硬幣,連贏 3 場
coins += 5 # 第一次獲勝
coins += 5 # 第二次獲勝
coins += 5 # 第三次獲勝
print("最終的硬幣數量:", coins) # 25
```
---
## 邏輯運算子 (Logical Operators)
### 處理布林值的運算子:
- `and`:兩者皆為 `True` 時,返回 `True`
- `or`:任一為 `True`,返回 `True`
- `not`:將 `True` 變 `False`,或相反
---
### 範例:
```python
a = True
b = False
print(a and b) # False
print(a or b) # True
print(not a) # False
```
---
### 練習題:
你是一個守衛,負責檢查進入城堡的訪客。若訪客年齡超過 18 且持有通行證才能放行。給定:
- `age = 20`
- `has_pass = True`
使用邏輯運算符檢查該訪客是否可以通過。
---
### 解答:
```python
# 訪客的年齡和通行證狀態
age = 20
has_pass = True
# 檢查訪客是否符合放行條件
if age > 18 and has_pass:
print("訪客可以通過。")
else:
print("訪客無法通過。")
```
---
## 位元運算子 (Bitwise Operators)
### 逐位操作數值的二進位表示:
- `&`:位元 AND
- `|`:位元 OR
- `^`:位元 XOR
- `~`:位元取反
- `<<`:左移
- `>>`:右移
---
### 範例:
```python
a = 60 # 00111100
b = 13 # 00001101
print(a & b) # 12 (00001100)
```
---
### 練習題:
有兩組燈光控制系統,`A` 控制的燈亮度為 `60` (二進位表示為 `00111100`),`B` 控制的燈亮度為 `13` (二進位表示為 `00001101`)。使用位元 `AND` 和 `OR` 運算來計算兩燈同時打開或其中一燈亮時的效果。
---
### 解答:
```python
# 定義燈光控制系統的亮度值
A = 60 # 00111100
B = 13 # 00001101
# 使用位元 AND 運算
and_result = A & B
print("位元 AND 運算結果:", and_result) # 12 (00001100)
# 使用位元 OR 運算
or_result = A | B
print("位元 OR 運算結果:", or_result) # 61 (00111101)
```
---
## 真值 (Truthy) 與假值 (Falsy)
### 概念
在 Python 中,任何物件皆可在布林上下文中視為 `True` 或 `False`。
- **Falsy 值**:空集合 (`[]`, `{}`)、數字 `0`、空字串 `""`、`None`
- **Truthy 值**:非空集合、非零數字、`True`
---
### 範例:
```python
print(bool("")) # False
print(bool("text")) # True
```
---
### 練習題:
你正在設計一個「密碼生成器」。如果用戶輸入了空字串 `""` 就表示密碼無效,否則有效。使用布林檢查輸入的字串是否為真值或假值,並打印「密碼有效」或「密碼無效」。
---
### 解答:
```python
# 用戶輸入的密碼
password = "" # 可以測試不同的值,例如 "mypassword"
# 檢查密碼是否為真值或假值
if password:
print("密碼有效")
else:
print("密碼無效")
```
---
## 短路運算 (Short-Circuit Evaluation)
### 當 Python 已能確定邏輯運算結果時,會停止運算:
- `A or B`:當 `A` 為 `True` 時停止。
- `A and B`:當 `A` 為 `False` 時停止。
### 範例:
```python
if 2 or (10 / 0):
print("No error") # 因為 2 為 True,不會執行 10 / 0
```
---
### 練習題:
假設你有一段程式碼會引發除以零錯誤 (如 `10 / 0`),請使用短路運算避免出錯。設計一個條件,若數字大於 `0` 就不會執行這段錯誤代碼。
---
### 解答:
```python
# 定義數字
num = 0 # 可以嘗試不同的數值,例如 5 或 0
# 使用短路運算避免除以零錯誤
if num > 0 and (10 / num):
print("成功執行除法")
else:
print("避免除以零錯誤")
```
---
{"title":"Week 5 - Python Chapter 2. Ope","description":"+:加法","contributors":"[{\"id\":\"e3444383-f025-48fc-8209-cf895dce5811\",\"add\":4959,\"del\":45}]"}