Skip to content

🔒 11.1 Tuple - Danh sách không thay đổi

📖 Giới thiệu

Tuple là kiểu dữ liệu giống list nhưng không thể thay đổi sau khi tạo. Tuple được dùng để lưu trữ dữ liệu cố định như tọa độ, thông tin cá nhân, hoặc các giá trị không muốn thay đổi.

Mục tiêu bài học:

  • Hiểu khác biệt giữa tuple và list
  • Biết cách tạo và sử dụng tuple
  • Ứng dụng tuple trong bài toán thực tế

🔧 Cú pháp

Tạo tuple:

python
# Với dấu ngoặc đơn
toa_do = (3, 5)
mau_rgb = (255, 0, 128)

# Không cần ngoặc đơn
diem = 8, 7, 9

# Tuple rỗng
rong = ()

# Tuple có 1 phần tử (cần dấu phẩy)
mot_phan_tu = (5,)

Truy cập tuple:

python
# Giống như list
print(toa_do[0])    # 3
print(mau_rgb[-1])  # 128

🔬 Phân tích & Giải thích chi tiết

1. 🔒 Tuple vs List

python
# List - có thể thay đổi
danh_sach = [1, 2, 3]
danh_sach[0] = 10  # OK
danh_sach.append(4)  # OK

# Tuple - không thể thay đổi  
bo_so = (1, 2, 3)
# bo_so[0] = 10     # LỖI!
# bo_so.append(4)   # LỖI!

2. 📍 Tạo và truy cập tuple

python
# Thông tin học sinh
hoc_sinh = ("An", 16, "10A")
ten = hoc_sinh[0]     # "An"
tuoi = hoc_sinh[1]    # 16
lop = hoc_sinh[2]     # "10A"

# Tọa độ
diem_a = (2, 5)
x = diem_a[0]         # 2
y = diem_a[1]         # 5

3. 🔄 Unpacking tuple

python
# Gán nhiều biến cùng lúc
thong_tin = ("Bình", 17, "11B")
ten, tuoi, lop = thong_tin

print(f"Tên: {ten}")
print(f"Tuổi: {tuoi}")
print(f"Lớp: {lop}")

# Hoán đổi giá trị
a = 5
b = 10
a, b = b, a  # Hoán đổi dùng tuple
print(f"a = {a}, b = {b}")  # a = 10, b = 5

💻 Ví dụ minh họa

Ví dụ 1: Lưu thông tin học sinh

python
# Thông tin học sinh dạng tuple
hoc_sinh_1 = ("Nguyễn Văn An", 16, "10A", 8.5)
hoc_sinh_2 = ("Trần Thị Bình", 17, "10B", 9.0)
hoc_sinh_3 = ("Lê Văn Chi", 16, "10A", 7.5)

# Danh sách các tuple
lop_hoc = [hoc_sinh_1, hoc_sinh_2, hoc_sinh_3]

print("📚 DANH SÁCH LỚP HỌC")
print("=" * 40)

print(f"{'Tên':<15} {'Tuổi':<6} {'Lớp':<6} {'Điểm':<6}")
print("-" * 40)

for hs in lop_hoc:
    ten, tuoi, lop, diem = hs
    print(f"{ten:<15} {tuoi:<6} {lop:<6} {diem:<6}")

print("-" * 40)

# Tìm học sinh có điểm cao nhất
diem_cao_nhat = 0
hs_gioi_nhat = None

for hs in lop_hoc:
    if hs[3] > diem_cao_nhat:  # hs[3] là điểm
        diem_cao_nhat = hs[3]
        hs_gioi_nhat = hs

print(f"Học sinh giỏi nhất: {hs_gioi_nhat[0]} ({hs_gioi_nhat[3]} điểm)")

Ví dụ 2: Tọa độ và khoảng cách

python
import math

# Các điểm trên mặt phẳng
diem_a = (0, 0)    # Gốc tọa độ
diem_b = (3, 4)    # Điểm B
diem_c = (6, 8)    # Điểm C

print("📍 TÍNH KHOẢNG CÁCH GIỮA CÁC ĐIỂM")
print("=" * 35)

def tinh_khoang_cach(p1, p2):
    """Tính khoảng cách giữa 2 điểm"""
    x1, y1 = p1
    x2, y2 = p2
    return math.sqrt((x2-x1)**2 + (y2-y1)**2)

# Tính các khoảng cách
ab = tinh_khoang_cach(diem_a, diem_b)
bc = tinh_khoang_cach(diem_b, diem_c)
ac = tinh_khoang_cach(diem_a, diem_c)

print(f"Điểm A: {diem_a}")
print(f"Điểm B: {diem_b}")
print(f"Điểm C: {diem_c}")
print("-" * 25)
print(f"Khoảng cách AB: {ab:.2f}")
print(f"Khoảng cách BC: {bc:.2f}")
print(f"Khoảng cách AC: {ac:.2f}")

# Kiểm tra tam giác
if ab + bc > ac and ab + ac > bc and bc + ac > ab:
    print("\n✅ Tạo thành tam giác")
else:
    print("\n❌ Không tạo thành tam giác")

Ví dụ 3: Màu RGB

python
# Định nghĩa màu dạng tuple (R, G, B)
mau_do = (255, 0, 0)
mau_xanh_la = (0, 255, 0)
mau_xanh_duong = (0, 0, 255)
mau_trang = (255, 255, 255)
mau_den = (0, 0, 0)

# Danh sách màu
bang_mau = [
    ("Đỏ", mau_do),
    ("Xanh lá", mau_xanh_la),
    ("Xanh dương", mau_xanh_duong),
    ("Trắng", mau_trang),
    ("Đen", mau_den)
]

print("🎨 BẢNG MÀU RGB")
print("=" * 30)

print(f"{'Tên màu':<12} {'R':<4} {'G':<4} {'B':<4}")
print("-" * 30)

for ten_mau, rgb in bang_mau:
    r, g, b = rgb
    print(f"{ten_mau:<12} {r:<4} {g:<4} {b:<4}")

print("-" * 30)

# Tạo màu mới bằng cách trộn
def tron_mau(mau1, mau2):
    """Trộn 2 màu bằng cách lấy trung bình"""
    r1, g1, b1 = mau1
    r2, g2, b2 = mau2
    
    r_moi = (r1 + r2) // 2
    g_moi = (g1 + g2) // 2
    b_moi = (b1 + b2) // 2
    
    return (r_moi, g_moi, b_moi)

# Trộn màu đỏ và xanh lá
mau_vang = tron_mau(mau_do, mau_xanh_la)
print(f"\nTrộn đỏ + xanh lá = {mau_vang}")

🏋️ Thực hành

Bài tập 1: Tạo tuple thông tin

python
# Tạo tuple thông tin cá nhân
thong_tin = ("An", 20, "Hà Nội")
ten, tuoi, que = thong_tin

print(f"Tên: {ten}")
print(f"Tuổi: {tuoi}")
print(f"Quê: {que}")

Bài tập 2: Hoán đổi số

python
# Hoán đổi 2 số dùng tuple
x = 5
y = 10

print(f"Trước: x={x}, y={y}")
x, y = y, x
print(f"Sau: x={x}, y={y}")

Bài tập 3: Tọa độ điểm

python
# Tạo và xử lý tọa độ
diem = (3, 7)
x, y = diem

print(f"Điểm ({x}, {y})")
print(f"Khoảng cách đến gốc: {(x**2 + y**2)**0.5:.2f}")

📋 Tóm tắt

Tuple vs List:

Đặc điểmTupleList
Thay đổi❌ Không✅ Có
Tốc độ⚡ Nhanh hơn🐌 Chậm hơn
Cú pháp(1,2,3)[1,2,3]
MethodsÍtNhiều

Khi nào dùng tuple:

  1. Dữ liệu cố định: Tọa độ, thông tin cá nhân
  2. Key của dictionary: Tuple có thể làm key
  3. Return nhiều giá trị: Function trả về tuple
  4. Hiệu suất: Khi cần tốc độ cao

Lưu ý quan trọng:

  1. Tuple 1 phần tử: Cần dấu phẩy (5,)
  2. Unpacking: Gán nhiều biến cùng lúc
  3. Immutable: Không thể thay đổi sau khi tạo
  4. Index: Truy cập giống như list

Chuẩn bị cho bài tiếp theo:

Bài tiếp theo sẽ học về 🗂️ Set - Tập hợp không trùng lặp!


💡 Mẹo: Dùng tuple cho dữ liệu không thay đổi để code an toàn hơn!

🔒 Thực hành: Thử lưu thông tin bạn bè bằng tuple!

🐍 Khóa học Python căn bản bằng tiếng Việt