Bỏ qua

Image

KIỂU BỘ - TUPLE TRONG PYTHON

I. Định nghĩa và đặc điểm

1. Tuple là gì?

Tuple (bộ) là một cấu trúc dữ liệu có thể lưu trữ nhiều giá trị trong một biến. Tuple được đặt trong dấu ngoặc tròn ().

# Các cách tạo tuple
diem_hoc_sinh = (8.5, 7.8, 9.2, 8.0)
thong_tin_ca_nhan = ("Nguyễn Văn An", 15, "Lớp 9A")
toa_do = (10, 20)

2. Đặc điểm của Tuple

  • Không thể thay đổi (immutable): Không thể thêm, sửa, xóa phần tử
  • Có thể truy cập theo chỉ số
  • Có thể chứa các kiểu dữ liệu khác nhau
  • Có thứ tự các phần tử
  • Thường dùng để lưu trữ dữ liệu cố định

II. Cách khai báo và sử dụng

1. Khai báo tuple

# Tuple rỗng
tuple_rong = ()

# Tuple với các phần tử
tuple_so = (1, 2, 3, 4, 5)
tuple_chuoi = ("An", "Bình", "Cường")
tuple_hop = (1, "Python", 3.14, True)

# Tuple lồng nhau
tuple_lop = (("An", 15), ("Bình", 16), ("Cường", 15))

# Tạo tuple từ list
danh_sach = [1, 2, 3, 4, 5]
tuple_tu_list = tuple(danh_sach)

2. Truy cập phần tử

thong_tin = ("Nguyễn Văn An", 15, "Lớp 9A", 8.5)
print("Thông tin:", thong_tin)
print("Tên:", thong_tin[0])        # Nguyễn Văn An
print("Tuổi:", thong_tin[1])       # 15
print("Lớp:", thong_tin[2])        # Lớp 9A
print("Điểm:", thong_tin[3])       # 8.5
print("Phần tử cuối:", thong_tin[-1])  # 8.5

3. Cắt tuple (Slicing)

diem_cac_mon = (8.5, 7.8, 9.2, 8.0, 7.5)
print("Danh sách điểm:", diem_cac_mon)
print("2 điểm đầu:", diem_cac_mon[:2])     # (8.5, 7.8)
print("3 điểm cuối:", diem_cac_mon[-3:])   # (9.2, 8.0, 7.5)
print("Điểm 1-3:", diem_cac_mon[1:4])     # (7.8, 9.2, 8.0)

III. Các thao tác cơ bản

1. Kiểm tra phần tử

diem = (8.5, 7.8, 9.2, 8.0)

# Kiểm tra phần tử có trong tuple không
print("8.5 có trong tuple:", 8.5 in diem)  # True
print("9.5 có trong tuple:", 9.5 in diem)  # False

# Đếm số lần xuất hiện
print("Số lần 8.0 xuất hiện:", diem.count(8.0))  # 1

# Tìm vị trí đầu tiên
vi_tri = diem.index(7.8)
print("Vị trí của 7.8:", vi_tri)  # 1

2. Duyệt tuple

diem_cac_mon = (8.5, 7.8, 9.2, 8.0)

# Duyệt trực tiếp
print("Các điểm số:")
for diem in diem_cac_mon:
    print(f"- {diem}")

# Duyệt với chỉ số
print("\nDanh sách có chỉ số:")
for i, diem in enumerate(diem_cac_mon):
    print(f"{i+1}. {diem}")

# Duyệt với range
for i in range(len(diem_cac_mon)):
    print(f"Điểm {i+1}: {diem_cac_mon[i]}")

3. Nối và lặp tuple

tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)

# Nối tuple
tuple3 = tuple1 + tuple2
print("Tuple sau khi nối:", tuple3)  # (1, 2, 3, 4, 5, 6)

# Lặp tuple
tuple_lap = tuple1 * 3
print("Tuple lặp 3 lần:", tuple_lap)  # (1, 2, 3, 1, 2, 3, 1, 2, 3)

IV. So sánh với List

1. Điểm khác biệt chính

# List - có thể thay đổi
danh_sach = [1, 2, 3, 4, 5]
danh_sach[0] = 10  # ✅ Có thể sửa
danh_sach.append(6)  # ✅ Có thể thêm
danh_sach.remove(3)  # ✅ Có thể xóa

# Tuple - không thể thay đổi
bo_so = (1, 2, 3, 4, 5)
# bo_so[0] = 10  # ❌ Lỗi! Không thể sửa
# bo_so.append(6)  # ❌ Lỗi! Không thể thêm
# bo_so.remove(3)  # ❌ Lỗi! Không thể xóa

2. Khi nào dùng Tuple?

# ✅ Dùng tuple khi:
# - Dữ liệu cố định, không thay đổi
toa_do = (10, 20)  # Tọa độ điểm
thong_tin_ca_nhan = ("An", 15, "Lớp 9A")  # Thông tin cá nhân
mau_sac = (255, 128, 0)  # Màu RGB

# ✅ Dùng list khi:
# - Dữ liệu có thể thay đổi
danh_sach_diem = [8.5, 7.8, 9.2]  # Có thể thêm điểm mới
danh_sach_ban = ["An", "Bình", "Cường"]  # Có thể thêm bạn mới

V. Các phương thức hữu ích

1. Chuyển đổi kiểu dữ liệu

# Chuyển list thành tuple
danh_sach = [1, 2, 3, 4, 5]
bo_tu_list = tuple(danh_sach)
print("Tuple từ list:", bo_tu_list)

# Chuyển tuple thành list
bo_so = (1, 2, 3, 4, 5)
danh_sach_tu_tuple = list(bo_so)
print("List từ tuple:", danh_sach_tu_tuple)

# Chuyển string thành tuple
chuoi = "Python"
tuple_chuoi = tuple(chuoi)
print("Tuple từ string:", tuple_chuoi)  # ('P', 'y', 't', 'h', 'o', 'n')

2. Sắp xếp tuple

# Sắp xếp tuple (tạo tuple mới)
diem = (8.5, 7.2, 9.1, 6.8, 8.9)
diem_sap_xep = tuple(sorted(diem))  # Tăng dần
print("Sắp xếp tăng dần:", diem_sap_xep)

diem_sap_xep_giam = tuple(sorted(diem, reverse=True))  # Giảm dần
print("Sắp xếp giảm dần:", diem_sap_xep_giam)

3. Tìm min, max, sum

diem = (8.5, 7.2, 9.1, 6.8, 8.9)
print("Danh sách điểm:", diem)
print("Điểm cao nhất:", max(diem))
print("Điểm thấp nhất:", min(diem))
print("Tổng điểm:", sum(diem))
print("Điểm trung bình:", sum(diem) / len(diem))

VI. Ví dụ minh họa

Ví dụ 1: Quản lý thông tin học sinh

# Tạo tuple chứa thông tin học sinh
hoc_sinh_1 = ("Nguyễn Văn An", 15, "Lớp 9A", 8.5)
hoc_sinh_2 = ("Trần Thị Bình", 16, "Lớp 9B", 9.2)
hoc_sinh_3 = ("Lê Văn Cường", 15, "Lớp 9A", 7.8)

# In thông tin học sinh
print("THÔNG TIN HỌC SINH:")
print(f"1. {hoc_sinh_1[0]} - {hoc_sinh_1[2]} - Điểm: {hoc_sinh_1[3]}")
print(f"2. {hoc_sinh_2[0]} - {hoc_sinh_2[2]} - Điểm: {hoc_sinh_2[3]}")
print(f"3. {hoc_sinh_3[0]} - {hoc_sinh_3[2]} - Điểm: {hoc_sinh_3[3]}")

# Tính điểm trung bình
diem_tb = (hoc_sinh_1[3] + hoc_sinh_2[3] + hoc_sinh_3[3]) / 3
print(f"\nĐiểm trung bình: {diem_tb:.2f}")

Ví dụ 2: Xử lý tọa độ điểm

# Tạo các điểm tọa độ
diem_a = (10, 20)
diem_b = (30, 40)
diem_c = (50, 60)

# Tính khoảng cách giữa 2 điểm
import math

def tinh_khoang_cach(diem1, diem2):
    x1, y1 = diem1
    x2, y2 = diem2
    return math.sqrt((x2 - x1)**2 + (y2 - y1)**2)

# Tính khoảng cách
kc_ab = tinh_khoang_cach(diem_a, diem_b)
kc_bc = tinh_khoang_cach(diem_b, diem_c)
kc_ac = tinh_khoang_cach(diem_a, diem_c)

print(f"Khoảng cách A-B: {kc_ab:.2f}")
print(f"Khoảng cách B-C: {kc_bc:.2f}")
print(f"Khoảng cách A-C: {kc_ac:.2f}")

Ví dụ 3: Xử lý màu sắc RGB

# Định nghĩa các màu cơ bản
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)

# Tạo màu mới bằng cách trộn
def tron_mau(mau1, mau2, ty_le=0.5):
    r = int(mau1[0] * ty_le + mau2[0] * (1 - ty_le))
    g = int(mau1[1] * ty_le + mau2[1] * (1 - ty_le))
    b = int(mau1[2] * ty_le + mau2[2] * (1 - ty_le))
    return (r, g, b)

# Trộn màu
mau_hong = tron_mau(mau_do, mau_trang, 0.7)
mau_xam = tron_mau(mau_trang, mau_den, 0.5)

print(f"Màu hồng: RGB{mau_hong}")
print(f"Màu xám: RGB{mau_xam}")

VII. Bài tập thực hành tại lớp

Bài 1: Tạo tuple môn học yêu thích

Đề bài: Tạo tuple chứa thông tin 3 môn học yêu thích và in ra màn hình.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo tuple chứa 3 tên môn học
  2. Sử dụng enumerate() để có số thứ tự
  3. In danh sách có định dạng đẹp
  4. Lưu ý tuple không thể thay đổi sau khi tạo

Input/Output mẫu:

Input Output
("Toán", "Tin học", "Anh") 1. Toán
2. Tin học
3. Anh
💡 Gợi ý code
# Tạo tuple môn học yêu thích
mon_yeu_thich = ("Toán", "Tin học", "Anh")

# In danh sách có số thứ tự
print("Các môn học yêu thích:")
for i, mon in enumerate(mon_yeu_thich, 1):
    print(f"{i}. {mon}")

Bài 2: Tính điểm trung bình từ tuple

Đề bài: Tạo tuple chứa điểm 4 môn học và tính điểm trung bình.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo tuple chứa điểm 4 môn học (float)
  2. Sử dụng sum() để tính tổng điểm
  3. Chia cho len() để có điểm trung bình
  4. Làm tròn kết quả 2 chữ số thập phân

Input/Output mẫu:

Input Tính toán Output
(8.5, 7.8, 9.2, 8.0) sum = 33.5 Điểm TB: 8.38
len = 4
33.5/4 = 8.375
💡 Gợi ý code
# Tạo tuple điểm
diem = (8.5, 7.8, 9.2, 8.0)

# Tính điểm trung bình
trung_binh = sum(diem) / len(diem)

# In kết quả
print(f"Điểm trung bình: {trung_binh:.2f}")

Bài 3: Tính chu vi tam giác từ tọa độ

Đề bài: Tạo tuple chứa tọa độ 3 điểm và tính chu vi tam giác.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo 3 tuple chứa tọa độ (x, y) của 3 đỉnh
  2. Viết hàm tính khoảng cách giữa 2 điểm
  3. Sử dụng công thức: d = √[(x2-x1)² + (y2-y1)²]
  4. Tính 3 cạnh của tam giác
  5. Chu vi = tổng 3 cạnh

Input/Output mẫu:

Tọa độ A Tọa độ B Tọa độ C Chu vi
(0, 0) (3, 0) (0, 4) 12.00
💡 Gợi ý code
import math

# Tạo tọa độ 3 điểm
diem_a = (0, 0)
diem_b = (3, 0)
diem_c = (0, 4)

# Hàm tính khoảng cách
def khoang_cach(d1, d2):
    return math.sqrt((d2[0] - d1[0])**2 + (d2[1] - d1[1])**2)

# Tính các cạnh
canh_ab = khoang_cach(diem_a, diem_b)
canh_bc = khoang_cach(diem_b, diem_c)
canh_ac = khoang_cach(diem_a, diem_c)

# Tính chu vi
chu_vi = canh_ab + canh_bc + canh_ac
print(f"Chu vi tam giác: {chu_vi:.2f}")

VIII. Bài tập về nhà

Bài 1: Quản lý thông tin học sinh

Đề bài: Viết chương trình quản lý thông tin học sinh sử dụng tuple (tên, tuổi, lớp, điểm).

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo tuple chứa thông tin học sinh (tên, tuổi, lớp, điểm)
  2. Truy cập từng thông tin theo index
  3. Hiển thị thông tin định dạng đẹp
  4. Tạo danh sách nhiều học sinh bằng list of tuples
  5. Thực hiện các thao tác: tìm kiếm, sắp xếp theo điểm

Input/Output mẫu:

Tuple Truy cập Kết quả hiển thị
("An", 15, "9A", 8.5) hs[0], hs[1], hs[2], hs[3] Tên: An, Tuổi: 15, Lớp: 9A, Điểm: 8.5

Bài 2: Xử lý tọa độ và tính diện tích tam giác

Đề bài: Viết chương trình xử lý tọa độ điểm và tính diện tích tam giác.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo 3 tuple tọa độ cho 3 đỉnh tam giác
  2. Sử dụng công thức Heron hoặc công thức tọa độ
  3. Công thức tọa độ: S = 0.5 * |x1(y2-y3) + x2(y3-y1) + x3(y1-y2)|
  4. Hoặc tính theo 3 cạnh với công thức Heron
  5. Hiển thị kết quả với độ chính xác 2 chữ số thập phân

Input/Output mẫu:

A B C Diện tích
(0, 0) (4, 0) (0, 3) 6.00

Bài 3: Quản lý thông tin sách

Đề bài: Viết chương trình tạo và xử lý tuple chứa thông tin sách (tên, tác giả, năm, giá).

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo tuple cho mỗi cuốn sách (tên, tác giả, năm, giá)
  2. Tạo danh sách nhiều sách bằng list of tuples
  3. Thực hiện các thao tác: tìm sách theo tên, tác giả
  4. Sắp xếp sách theo năm xuất bản hoặc giá
  5. Thống kê: sách đắt nhất, rẻ nhất, trung bình giá

Input/Output mẫu:

Sách Thông tin
("Python cơ bản", "Nguyễn Văn A", 2023, 150000) Tên: Python cơ bản
Tác giả: Nguyễn Văn A
Năm: 2023, Giá: 150,000đ

Bài 4: Quản lý thông tin thời tiết

Đề bài: Viết chương trình quản lý thông tin thời tiết (nhiệt độ, độ ẩm, trạng thái) sử dụng tuple.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo tuple cho thông tin thời tiết từng ngày
  2. Format: (ngày, nhiệt độ, độ ẩm, trạng thái)
  3. Tạo danh sách dữ liệu thời tiết một tuần
  4. Thống kê: nhiệt độ cao nhất, thấp nhất, trung bình
  5. Đếm số ngày có mưa, nắng, âm u

Input/Output mẫu:

Thời tiết Thống kê
("T2", 28, 75, "Nắng") Nhiệt độ TB: 27.5°C
("T3", 26, 80, "Mưa") Ngày nắng: 4 ngày
("T4", 29, 70, "Nắng") Ngày mưa: 3 ngày

IX. Ghi chú quan trọng

1. Đặc điểm của Tuple

  • Tuple không thể thay đổi (immutable)
  • Có thể chứa các kiểu dữ liệu khác nhau
  • Có thứ tự các phần tử
  • Chỉ số bắt đầu từ 0
  • Thường dùng cho dữ liệu cố định

2. So sánh với List

  • List: Có thể thay đổi (mutable)
  • Tuple: Không thể thay đổi (immutable)
  • List: Dùng cho dữ liệu động
  • Tuple: Dùng cho dữ liệu cố định

3. Lưu ý khi sử dụng

  • Không thể sửa, thêm, xóa phần tử trong tuple
  • Có thể chuyển đổi giữa tuple và list
  • Tuple thường dùng làm key trong dictionary
  • Tuple có thể dùng làm tham số cho hàm