📊 10.4 Ứng dụng thực tế list 2 chiều
📖 Giới thiệu
List 2 chiều có rất nhiều ứng dụng thực tế trong đời sống và lập trình. Từ quản lý dữ liệu học tập đến xây dựng game đơn giản, việc hiểu và sử dụng thành thạo list 2 chiều sẽ giúp bạn giải quyết nhiều bài toán thực tế.
INFO
List 2 chiều rất hữu ích cho việc lưu trữ và xử lý dữ liệu có cấu trúc dạng bảng
🎓 Ứng dụng trong giáo dục
📚 Hệ thống quản lý điểm
# Bảng điểm lớp 12A1
class_scores = [
["Nguyễn Văn A", 8, 9, 7, 8.5],
["Trần Thị B", 9, 8, 9, 8.7],
["Lê Văn C", 7, 8, 8, 7.7],
["Phạm Thị D", 10, 9, 8, 9.0]
]
def in_bang_diem(scores):
print("📊 BẢNG ĐIỂM LỚP 12A1")
print("-" * 50)
print(f"{'Tên':<15} {'Toán':<6} {'Lý':<6} {'Hóa':<6} {'TB':<6}")
print("-" * 50)
for hoc_sinh in scores:
ten = hoc_sinh[0]
toan = hoc_sinh[1]
ly = hoc_sinh[2]
hoa = hoc_sinh[3]
tb = hoc_sinh[4]
print(f"{ten:<15} {toan:<6} {ly:<6} {hoa:<6} {tb:<6}")
in_bang_diem(class_scores)TIP
Sử dụng list 2 chiều để quản lý thông tin học sinh một cách có tổ chức
📅 Thời khóa biểu thông minh
# Thời khóa biểu tuần
schedule = [
["Thứ 2", "Toán", "Lý", "Hóa", "Văn", "Anh"],
["Thứ 3", "Anh", "Toán", "Sử", "Địa", "Sinh"],
["Thứ 4", "Lý", "Hóa", "Anh", "Toán", "GDCD"],
["Thứ 5", "Văn", "Sử", "Địa", "Sinh", "Tin"],
["Thứ 6", "Thể dục", "Âm nhạc", "Mỹ thuật", "Chào cờ", "Sinh hoạt"]
]
def tim_mon_hoc(schedule, mon):
"""Tìm môn học xuất hiện vào ngày nào"""
lich_hoc = []
for ngay in schedule:
ten_ngay = ngay[0]
for tiet, mon_hoc in enumerate(ngay[1:], 1):
if mon_hoc == mon:
lich_hoc.append(f"{ten_ngay} - Tiết {tiet}")
return lich_hoc
# Tìm lịch học Toán
lich_toan = tim_mon_hoc(schedule, "Toán")
print("📚 Lịch học môn Toán:")
for lich in lich_toan:
print(f" • {lich}")🎮 Ứng dụng trong game
⭕ Game Tic-Tac-Toe
def khoi_tao_bang():
"""Tạo bàn cờ 3x3 trống"""
return [[' ' for _ in range(3)] for _ in range(3)]
def in_bang_co(board):
"""In bàn cờ tic-tac-toe"""
print("\n 🎮 TIC-TAC-TOE")
print(" 0 1 2")
for i, hang in enumerate(board):
print(f"{i} {hang[0]} | {hang[1]} | {hang[2]}")
if i < 2:
print(" ---|---|---")
def kiem_tra_thang(board, player):
"""Kiểm tra người chơi có thắng không"""
# Kiểm tra hàng
for hang in board:
if all(o == player for o in hang):
return True
# Kiểm tra cột
for cot in range(3):
if all(board[hang][cot] == player for hang in range(3)):
return True
# Kiểm tra đường chéo
if all(board[i][i] == player for i in range(3)):
return True
if all(board[i][2-i] == player for i in range(3)):
return True
return False
# Demo game
board = khoi_tao_bang()
board[1][1] = 'X' # X đánh giữa
board[0][0] = 'O' # O đánh góc
board[2][2] = 'X' # X đánh góc đối diện
in_bang_co(board)
if kiem_tra_thang(board, 'X'):
print("🎉 X thắng!")WARNING
Trong game thực tế, cần thêm kiểm tra input và xử lý lỗi
💣 Trò chơi tìm mìn đơn giản
import random
def tao_ban_min(kich_thuoc=5, so_min=5):
"""Tạo bàn mìn với kích thước và số mìn cho trước"""
ban = [[0 for _ in range(kich_thuoc)] for _ in range(kich_thuoc)]
# Đặt mìn ngẫu nhiên
min_da_dat = 0
while min_da_dat < so_min:
x = random.randint(0, kich_thuoc-1)
y = random.randint(0, kich_thuoc-1)
if ban[x][y] != -1: # -1 là mìn
ban[x][y] = -1
min_da_dat += 1
return ban
def in_ban_min(board):
"""In bàn mìn (dành cho debug)"""
print("\n💣 BẢN MÌN (Debug)")
for hang in board:
for o in hang:
if o == -1:
print("💣", end=" ")
else:
print(f"{o:2}", end=" ")
print()
# Demo
ban_min = tao_ban_min(4, 3)
in_ban_min(ban_min)📈 Ứng dụng phân tích dữ liệu
💰 Thống kê doanh thu
# Doanh thu 12 tháng của 3 chi nhánh (tỷ VND)
doanh_thu = [
[15.2, 18.5, 22.1, 19.8, 25.3, 28.7, 32.1, 29.9, 26.5, 30.2, 34.8, 38.5], # Chi nhánh HN
[12.8, 16.2, 18.9, 17.5, 21.2, 24.8, 27.3, 25.1, 22.9, 26.7, 29.5, 32.1], # Chi nhánh HCM
[8.5, 10.2, 12.7, 11.3, 14.8, 16.9, 19.2, 17.8, 15.6, 18.3, 20.7, 23.4] # Chi nhánh DN
]
chi_nhanh = ["Hà Nội", "TP.HCM", "Đà Nẵng"]
def thong_ke_doanh_thu(data, names):
"""Thống kê doanh thu các chi nhánh"""
print("📊 THỐNG KÊ DOANH THU NĂM 2024")
print("=" * 50)
for i, cn in enumerate(names):
tong = sum(data[i])
tb = tong / 12
print(f"🏢 {cn}:")
print(f" Tổng: {tong:.1f} tỷ VND")
print(f" TB/tháng: {tb:.1f} tỷ VND")
print()
def tim_thang_cao_nhat(data, names):
"""Tìm tháng có doanh thu cao nhất"""
max_dt = 0
thang_max = 0
cn_max = ""
for i, cn_data in enumerate(data):
for thang, dt in enumerate(cn_data):
if dt > max_dt:
max_dt = dt
thang_max = thang + 1
cn_max = names[i]
print(f"🏆 Doanh thu cao nhất: {max_dt:.1f} tỷ")
print(f"📅 Tháng {thang_max}/2024 - Chi nhánh {cn_max}")
thong_ke_doanh_thu(doanh_thu, chi_nhanh)
tim_thang_cao_nhat(doanh_thu, chi_nhanh)Bài tập thực hành
Bài 1: Quản lý lớp học Tạo danh sách học sinh với thông tin: [Tên, Tuổi, Điểm TB]. Viết hàm:
- Tìm học sinh có điểm cao nhất
- Tính điểm trung bình của cả lớp
- In danh sách học sinh theo thứ tự điểm giảm dần
Bài 2: Game đoán số Tạo ma trận 4x4 chứa các số từ 1-16. Người chơi đoán vị trí của một số:
- Hiển thị ma trận với dấu "?"
- Nhận input từ người chơi
- Kiểm tra và hiển thị kết quả
Bài 3: Bảng nhiệt độ Lưu nhiệt độ 7 ngày trong tuần, 4 khung giờ (sáng, trưa, chiều, tối):
- Tính nhiệt độ trung bình theo ngày
- Tìm khung giờ nóng nhất trong tuần
- So sánh nhiệt độ giữa các ngày
📚 Tóm tắt
List 2 chiều có rất nhiều ứng dụng thực tế:
- 🎓 Giáo dục: Quản lý điểm, thời khóa biểu, danh sách học sinh
- 🎮 Game: Tic-tac-toe, minesweeper, puzzle games
- 📊 Dữ liệu: Thống kê, báo cáo, phân tích theo thời gian
- 💼 Kinh doanh: Doanh thu, inventory, customer data
Lời khuyên
Bắt đầu với các ứng dụng đơn giản rồi dần phát triển thành các hệ thống phức tạp hơn