嗨囉~又見面啦!昨天我們玩了 while 迴圈的進階技巧,學會了:
while True + break
的無窮迴圈while … else
的特殊用法continue
跳過不符合條件的輸入還實作了 選課系統,透過動態 List 控制迴圈流程!!應該蠻有成就感的吧?
經過一個禮拜的「迴圈轟炸」,是不是有點頭暈了呢?(你沒暈我也頭暈了!)
沒關係!今天我們換換主題,來看看集合型態的另一個成員:Tuple(元組)。
回想一下,在 Day9 我們初登場了集合型態的 List(串列),
之後在講 for
和 while
迴圈時,它一直是我們範例的固定班底。
(可以去回顧一下!)
而 Tuple 常常會和 List 放在一起比較。
今天,我們就來深入了解:
一起來看看吧!
Tuple(元組)可以想像成 「固定不動的清單」。
它和 List 很像,也能放多個元素,還可以存不同資料型態
(數字、字串、布林、甚至 List),但有個大不同:
Tuple 一旦建立,就不能修改(不可新增、刪除或改變元素)。
# 小括號表示 tuple
my_tuple = (10, 20, 30)
print(my_tuple)
print(type(my_tuple)) # <class 'tuple'>
輸出:
(10, 20, 30)
<class 'tuple'>
特性 | List | Tuple |
---|---|---|
可否修改 | 可變 | 不可變 |
語法 | [] |
() |
用途 | 任務清單、動態資料 | 固定資料、設定值、字典 key |
效能 | 一般 | 稍快,因為不可變 |
小提醒:
Tuple 就像書本的章節順序固定,不會隨便被換頁;
List 就像可自由編排的記事本。
t = ("Python", "C", "Java")
print(t[0]) # Python
print(t[-1]) # Java
print(t[0:2]) # ('Python', 'C')
輸出:
索引、切片和 List 一模一樣
可以用 len()
取得長度
print(len(t)) # 3
t = (1, 2, 3)
t[0] = 100 # 會報錯!TypeError: 'tuple' object does not support item assignment
輸出:
single = (5,) # 注意後面要加逗號
print(type(single)) # <class 'tuple'>
如果寫成 (5)
→ Python 會當作數字,不是 tuple
l = [1, 2, 3]
t = tuple(l) # List → Tuple
print(t) # (1, 2, 3)
l2 = list(t) # Tuple → List
print(l2) # [1, 2, 3]
這個功能很實用,當你需要「暫時固定」資料時可以轉成 tuple!
nums = (1, 2, 2, 3, 2, 4)
print(nums.count(2)) # 3,因為 2 出現三次
nums = (1, 2, 3, 4, 2)
print(nums.index(2)) # 1 (第一個 2 出現在位置 1)
⚠️ 注意:如果要找的值不存在,會報錯:
nums = (1, 2, 3)
print(nums.index(9)) # ❌ ValueError
輸出:
fruits_list = ["蘋果", "香蕉", "橘子"]
fruits_tuple = ("蘋果", "香蕉", "橘子")
# List 遍歷
for f in fruits_list:
print(f"List: {f}")
print("====我是分隔線====")
# Tuple 遍歷
for f in fruits_tuple:
print(f"Tuple: {f}")
輸出:
注意:遍歷方式完全一樣,Tuple 只是不能修改元素。
fruits_tuple = ("蘋果", "香蕉", "橘子")
try:
fruits_tuple[0] = "西瓜"
except TypeError as e:
print("錯誤:", e)
輸出:
# List 不能當 key,但 Tuple 可以
location = {}
coord = (25.03, 121.56) # 台北經緯度
location[coord] = "Taipei"
print(location)
輸出:
# 生日清單
students = [("小明", "2008-05-12"), ("小華", "2008-08-23")]
# 遍歷
for name, birthday in students:
print(f"{name} 生日是 {birthday}")
Tuple 在這裡就像「固定資料包」,List 是外層清單可以動態增刪學生。
輸出:
所謂「解構」就是把一個 Tuple 的元素,直接拆開後分別指定給多個變數。
這樣可以讓程式碼更直觀,不用一個一個用索引取值。
student = ("20250929", "Sharon")
# 一次拆成兩個變數
sid, name = student
print(sid) # 輸出: 20250929
print(name) # 輸出: Sharon
💡 小技巧:
如果 Tuple 的元素比變數多,可以用_忽略不需要的值:
data = ("Alice", 20, "Taipei")
name, _, city = data
print(name, city) # 輸出: Alice Taipei
這邊先看一下完整的程式碼:
# 學生資料 (Tuple)
students = [
("20250929", "Sharon"),
("20250930", "Bob"),
("20251001", "Charlie")
]
# 課程清單
courses = ["Python", "C", "Java", "HTML", "CSS"]
print("=== 學生選課系統 ===")
student_id = input("請輸入學生編號:")
# 檢查學生是否存在
for sid, name in students:
if sid == student_id:
print(f"✅ 歡迎 {name} (ID: {sid})")
selected = []
while len(selected) < 3:
print("\n可選課程:")
for i, c in enumerate(courses, 1):
print(f"{i}. {c}")
try:
choice = int(input("請輸入課程編號:"))
except ValueError:
print("⚠️ 請輸入數字")
continue
if 1 <= choice <= len(courses):
course = courses[choice-1]
if course in selected:
print(f"⚠️ {course} 已選過")
continue
selected.append(course)
print(f"✅ 選擇 {course}")
else:
print("⚠️ 編號無效")
print(f"\n🎉 {name} (ID: {sid}) 選課完成!")
print("選課結果:", selected)
break
else:
print("❌ 查無此學生,請確認學號是否正確")
完整輸出:
接下來我會對每個程式區塊做解析!一起來看看~
students = [
("20250929", "Sharon"),
("20250930", "Bob"),
("20251001", "Charlie")
]
courses = ["Python", "C", "Java", "HTML", "CSS"]
students
用 Tuple 保存學號 + 姓名,保證資料不會被修改。courses
是一個 list,放所有可選課程。student_id = input("請輸入學生編號:")
for sid, name in students:
if sid == student_id:
...
break
else:
print("❌ 查無此學生,請確認學號是否正確")
student_id
。for
迴圈逐一檢查 students
中的 tuple,看學號是否存在。else
,輸出「查無此學生」。輸出:
selected = []
while len(selected) < 3:
print("\n可選課程:")
for i, c in enumerate(courses, 1):
print(f"{i}. {c}")
len(selected) < 3
。enumerate
把課程依序列出來給學生選。choice = int(input("請輸入課程編號:"))
try-except
確保輸入必須是數字,否則提示錯誤並 continue
回去重來。(之後會再介紹 try-except
)if 1 <= choice <= len(courses):
course = courses[choice-1]
if course in selected:
print(f"⚠️ {course} 已選過")
continue
selected.append(course)
print(f"✅ 選擇 {course}")
else:
print("⚠️ 編號無效")
continue
。selected
,顯示「成功選擇」。輸出:
print(f"\n🎉 {name} (ID: {sid}) 選課完成!")
print("選課結果:", selected)
• 當 while
條件結束(選滿 3 門課)後,輸出學生選課結果。
輸出:
今天我們認識了集合型態家族裡的新角色:Tuple(元組)。
它跟 List 長得很像,但有一個超關鍵差異——一旦建立就不能改!
List:適合放「會變動」的資料(例如課程清單、購物車)
Tuple:適合放「固定不變」的資料(例如學生 ID、地理座標)
我們也實際動手學了幾招:
基本操作:索引、切片、count()、index()。
互轉技巧:List ↔ Tuple 轉換。
進階應用:
解構 (Unpacking),一次拆成好幾個變數。
當作字典 key,利用它不可變的特性。
最後我們在實戰演練中利用學生選課系統這個範例把概念串起來:
這樣搭配下來,剛好展現了 Tuple 的穩定性 和 List 的靈活性。
下次如果你需要「有些東西要鎖死,有些東西要能改」的場景,就知道該怎麼選啦!
那麼,今天辛苦啦!我們明天見呦~