Python – Module 6 – Ba lô nhà thám hiểm (Lists & Collections) 🎒

Cho đến giờ, chúng ta chỉ lưu một thứ tại một thời điểm trong các biến ma thuật. Nếu muốn theo dõi nhiều vật phẩm cùng lúc, sẽ cần hàng tá biến riêng biệt!

Trong lập trình, chúng ta giải quyết vấn đề này bằng cách nhóm mọi thứ lại với nhau. Những nhóm dữ liệu được gọi chung là Collections (Loại tập hợp). Có nhiều dạng collection khác nhau – mỗi loại phù hợp cho một mục đích khác nhau trong game!

1. Lists – Danh sách có thứ tự

List là một biến chứa một tập hợp các item có thứ tự xác định. Hãy tưởng tượng nó như một cái ba lô – bạn đặt đồ vào, và chúng nằm ở vị trí cụ thể. Tạo list bằng dấu ngoặc vuông [].

Ví dụ: Tạo ba lô đồ

Kết quả:

Một list có thể chứa bất kỳ kiểu dữ liệu nào – string, số, boolean, thậm chí là các list khác!

2. Index – Lấy từng item ra từ List

Mỗi item trong list đều có một vị trí (index) bắt đầu từ 0. Máy tính đếm từ 0, không phải từ 1!

Ví dụ: Chọn trang bị

Truy xuất ngược với index âm

Python cho phép đếm từ cuối list trở về đầu bằng số âm! -1 là item cuối cùng.

Slicing – Cắt – đoạn của List

Bạn có thể trích xuất một đoạn liên tiếp từ list dùng cú pháp [start:stop].

Lưu ý: phần tử tại stop không được bao gồm trong kết quả.

3. Thêm và Xóa item trong List

Khi giết quái vật và nhặt được quà, bạn cần thêm chúng vào ba lô. Khi dùng hết thuốc, bạn cần xóa chúng đi!

.append() — Thêm vào cuối list

.remove() — Xóa item cụ thể

⚠️ Lưu ý: Nếu item không tồn tại trong list, .remove() sẽ báo lỗi!

.pop() — Lấy và xóa item tại vị trí

.pop() không chỉ xóa mà còn trả về item bị xóa — cực hữu ích để xử lý lượt chơi!

Có thể gọi .pop() không đối số để lấy item cuối cùng:

len() — Độ dài của List

Muốn biết có bao nhiêu item trong túi? Dùng len()!

Mẹo thực chiến: Kiểm tra xem danh sách rỗng chưa:

Sửa item trực tiếp bằng index

Bạn có thể thay đổi giá trị của một vị trí cụ thể:

4. Nối và Nhân List

Hai toán tử đặc biệt giúp làm việc với list dễ dàng hơn!

Nối list bằng +

Lặp lại list bằng *

5. Duyệt List với vòng lặp

Khi có nhiều item, thay vì truy cập từng index, hãy dùng for … in:

Duyệt từng item

Kết quả:

Filter items dựa trên điều kiện

List comprehension – Tạo list nhanh gọn

Python cho phép tạo list mới từ một list có sẵn bằng cú pháp ngắn gọn:

6. Sắp xếp List

.sort() sắp xếp các item theo thứ tự alphabet hoặc tăng dần:

Sắp xếp giảm dần với tham số reverse=True:

7. Tuples — List bất biến

Tuple giống hệt List nhưng không thể sửa đổi sau khi tạo. Dùng dấu ngoặc tròn () thay vì vuông [].

Ví dụ: Cấu hình cố định của game

Tại sao dùng Tuple thay vì List?

Tuple dùng khi dữ liệu phải giữ nguyên – như màu sắc hay tọa độ. Python xử lý tuple nhanh hơn và an toàn hơn vì không ai vô tình thay đổi được!

8. Sets – Tập hợp không trùng lặp

Set là collection không có thứ tự và không cho phép item trùng lặp. Dùng dấu ngoặc {} hoặc hàm set().

Ví dụ: Loại bỏ item trùng trong loot

Toán tử Set – Union, Intersection, Difference

Sets rất mạnh khi so sánh hai tập hợp – ví dụ: kiểm tra overlap giữa kỹ năng của hai nhân vật!

Thêm/xóa item trong Set

9. Dictionaries – Bảng dữ liệu khóa – giá trị

Dictionary (Dict) lưu trữ dữ liệu dạng key: value. Khác với list dùng index số, dict dùng tên khóa để lấy giá trị. Tạo bằng {}.

Ví dụ: Hồ sơ nhân vật hoàn chỉnh

Thêm và sửa key-value

Duyệt Dictionary

Kết quả:

Dữ liệu lồng nhau – Dict trong List

Kết quả:

10. Queues (Deques) – Hàng đợi ưu tiên

Queue hoạt động theo nguyên tắc FIFO (First In, First Out) – người đến trước phục vụ trước. Trong Python, chúng ta dùng collections.deque để tạo queue hiệu quả.

Ví dụ: Hàng chờ lượt trong combat

So sánh với List

Deque tối ưu khi bạn thường xuyên thêm/xóa ở cả hai đầu!

Ví dụ: Hệ thống undo (hoàn tác hành động)

11. Thực Hành Tích Hợp ⚔️

Nhiệm vụ 1: Zombie Survival Kit (List)

Một đại dịch zombie đang diễn ra! Bạn có 5 giây để chạy qua nhà và nhặt 5 vật phẩm.

Nhiệm vụ 2: Ranking System (List + Sort)

Hệ thống bảng xếp hạng tournament – sắp xếp điểm số giảm dần và tặng huy chương!

Nhiệm vụ 3: Potion Recipe Book (Dict)

Xây dựng một cuốn sổ công thức pha potion:

🏆 Thử thách cuối: Hãy viết một hàm nhỏ kiểm tra xem ingredient nào có trong tất cả các công thức!

12. Bảng Tổng Kết Collections

CollectionCú phápThứ tựTrùng lặpSửa đổiKhi nào dùng
List[]✅ Có✅ Cho phép✅ Thêm/xóa/sửaBa lô, danh sách kẻ địch, leaderboard
Tuple()✅ Có✅ Cho phép❌ Bất biếnTọa độ, cấu hình cố định, team lineup
Set{}❌ Không❌ Duy nhất✅ Thêm/xóaLoại bỏ trùng, so sánh overlaps
Dict{k:v}✅ (Py3.7+)Keys: unik✅ Thêm/sửaHồ sơ nhân vật, config, lookup tables
Dequedeque()✅ Có✅ Cho phép✅ Hai đầuHàng đợi lượt, undo history

13. Tổng kết Module

  • List [] — collection có thứ tự, sửa đổi được. Methods phổ biến: .append(), .remove(), .pop(), .sort(), len()
  • Tuple () — giống list nhưng bất biến, dùng cho dữ liệu cố định
  • Set {} — collection không trùng lặp, hỗ trợ union/intersection/difference
  • Dictionary {k:v} — lưu dữ liệu theo khóa-giá trị, truy cập nhanh bằng tên khóa
  • Deque — queue/deck hiệu quả, thao tác ở cả hai đầu với O(1)
  • List comprehension — cách Pythonic để tạo list mới từ list cũ
  • Tất cả collections đều duyệt được bằng vòng lặp for

Bạn đã sẵn sàng cho cấp độ tiếp theo? Trong Module 7, chúng ta sẽ học cách xây dựng Functions (Hàm) — những khối code reusable, giống như các skill template mà bạn có thể cast lại nhiều lần! ⚡

(Continue)

Hãy liên lạc với chúng tôi nếu bạn cần hỗ trợ:
vuanhduc2685@gmail.com
hoanvtt99@gmail.com

Leave a Reply

Your email address will not be published. Required fields are marked *