Tổng kết module — bạn đã có một quy trình lặp lại được
Bóc đề, giải tay, vẽ lưu đồ, phân rã, đặt tên hàm, soi ca biên. Nhìn lại bảy bài, và tự chấm trước khi sang module cuối: chuyện gì xảy ra khi code sai.
TL;DR: Module này không thêm cấu trúc nào vào cỗ máy trong đầu bạn — nó thêm một thứ tự thao tác để đi từ đề tiếng Việt tới lời giải. Sáu khâu: bóc ba ô vào–xử lý–ra, giải tay ba ca để quy luật lộ ra, ghi bằng lưu đồ bốn ký hiệu, phân rã tới mức mỗi bước gõ được ngay, đặt tên cho nhóm bước xứng đáng có tên, rồi soi năm ca biên. Điểm chung của mọi lỗi trong module: chúng nằm ở chỗ bạn bỏ qua một khâu, không phải ở chỗ bạn gõ sai cú pháp. Đây là trang để bookmark và tự chấm trước khi sang module cuối.
1. Đã đi qua những gì
Bảy bài vừa rồi không phải bảy mẹo rời nhau. Chúng là một vòng, và vòng đó khép lại được:

Cạnh quay lui bên phải là phần nhiều người bỏ sót. Soi ca biên mà thấy lời giải gãy thì bạn không vá tạm ở chỗ gãy — bạn quay về ô ràng buộc ở khâu một và sửa ở đó, vì gãy ở ca biên gần như luôn có nghĩa là ô VÀO của bạn viết thiếu.
2. 🗺️ Cheat sheet — sáu khâu dán lên tường
| Khâu | Làm gì | Biết là xong khi |
|---|---|---|
| ① Bóc đề | viết ba ô VÀO / XỬ LÝ / RA | ô VÀO có đủ kiểu và ràng buộc của từng dữ liệu; ô RA là đúng một kết quả cụ thể |
| ② Giải tay | tự tính đáp án bằng giấy cho ba ca | ba ca trả lời ba câu hỏi khác nhau, và bạn phát biểu được quy luật thành một câu |
| ③ Ghi bằng lưu đồ | vẽ bằng bầu dục, bình hành, chữ nhật, thoi | mỗi hình thoi có đủ hai cạnh đi ra, kể cả cạnh chỉ để thoát |
| ④ Phân rã | chia bước còn mơ hồ xuống tầng dưới | mỗi bước gõ thành một lệnh Python được ngay, không phải "gần được" |
| ⑤ Đặt tên | gói nhóm bước thành hàm | nhóm đó gọi tên được bằng một động từ; tham số là ô VÀO, return là ô RA |
| ⑥ Soi ca biên | thử rỗng, một phần tử, 0, âm, trùng | mỗi ca bạn nói được nó chạy đúng hay gãy, và gãy ở dòng nào |
Bốn ký hiệu của khâu ③, không có hình thứ năm: bầu dục mở và đóng · bình hành vào và ra · chữ nhật tính và gán · thoi hỏi một câu đúng/sai.
3. 📖 Từ vựng module
| Từ | Nghĩa trong module này |
|---|---|
| I-P-O (vào – xử lý – ra) | khung ba ô để bóc một đề; cũng chính là khung của một hàm ở quy mô nhỏ |
| Ràng buộc | điều kiện dữ liệu vào phải thoả (từ 0 tới 10, có thể rỗng) — có ràng buộc đề nói thẳng, có ràng buộc bạn phải tự suy ra và ghi thành giả định |
| Giải tay | tự tính đáp án bằng giấy bút cho một ca cụ thể, xong hẳn trước khi gõ code |
| Lưu đồ có cấu trúc | ký pháp bốn ký hiệu ghi lời giải, không phụ thuộc ngôn ngữ nào |
| Cạnh quay lui | mũi tên đi ngược lên trên trong lưu đồ — chính là vòng lặp |
| Phân rã | chia một bước lớn thành các bước nhỏ hơn, dừng khi mỗi bước gõ được ngay |
| Tham số | ô nhớ mới do lời gọi hàm tạo ra, độc lập với biến bên ngoài |
| Ca biên | giá trị nằm ở rìa vùng hợp lệ — nơi lời giải chạy đúng với ca thường vẫn gãy |
4. ⚠️ Sáu lỗi im lặng của module
Không lỗi nào trong sáu lỗi này làm chương trình báo lỗi. Chúng chỉ làm kết quả sai.
- Ô VÀO chỉ ghi tên dữ liệu. "Một danh sách" thay vì "một danh sách số, mỗi số từ 0 tới 10, có thể rỗng" — và ba ca biên ở bài 6 chui lọt qua đúng khe hở đó.
- Bỏ khâu giải tay. Với đề "đếm bạn trên trung bình", ca
8, 8cho ra 0 bạn; ai không cầm bút giải sẽ viết lời giải trả lời sai đúng ca đó. - Hình thoi nhiều hơn hai cạnh.
if/elif/elselà một chuỗi hình thoi nối tiếp nhau, không phải một hình thoi ba nhánh — vẽ sai chỗ này thì code viết ra cũng sai cấu trúc. - Chia quá tay hoặc chia lệch tầng. Bản phân rã thành ra một bản chép code, hoặc một nhánh chi tiết tới lệnh còn nhánh kia vẫn là ý tưởng.
- Quên
return. Hàm âm thầm trả vềNone; chương trình chạy trơn tru, giá trị dùng lại thì sai. - Khởi tạo mốc bằng hằng số 0.
cao_nhat = 0thay vì lấy một phần tử thật của dữ liệu — đúng với mọi ca dương, sai câm với dữ liệu âm.
✅ Self-assessment
Tick được cả sáu ý dưới thì bạn sẵn sàng qua module cuối. Ô nào còn ngập ngừng, đọc lại đúng chỗ được gợi ý ngay dưới nó rồi quay lại tick.
- Tôi bóc được một đề văn xuôi thành ba ô vào–xử lý–ra: ô vào ghi đủ kiểu lẫn ràng buộc của từng dữ liệu, ô ra nêu đúng một kết quả.
- Nếu chưa chắc: đọc lại bài 01 mục 3 và tự bóc lại đề ở mục 5.
- Tôi giải tay ba ca cụ thể trước khi viết bước, và rút được quy luật chung từ ba ca đó.
- Nếu chưa chắc: đọc lại bài 02 mục 5 và 6, rồi làm lại đề ở mục 7.
- Tôi kể được bốn ký hiệu của lưu đồ có cấu trúc, và nói được hai chỗ lưu đồ bất lực.
- Nếu chưa chắc: đọc lại bài 03 mục 2 và mục 6.
- Tôi phân rã được một đề nhiều bước bằng lưu đồ, tới mức mỗi bước gõ được ngay.
- Nếu chưa chắc: đọc lại bài 04 mục 2 và 3, rồi làm lại đề ở mục 5.
- Tôi chọn được ranh giới hàm cho một lời giải đã phân rã — tham số nào vào, giá trị nào ra — theo tiêu chí nhóm bước đó có gọi tên được bằng một động từ hay không.
- Nếu chưa chắc: đọc lại bài 05 mục 3 và làm lại bài chọn ranh giới ở mục 6.
- Tôi chỉ ra được chỗ lời giải gãy ở năm ca biên: rỗng, một phần tử, số 0, số âm, giá trị trùng.
- Nếu chưa chắc: đọc lại bài 06 mục 3 và 4, rồi làm lại bài ở mục 5.
Còn một phép thử thật hơn cả sáu ô trên: quay lại bài 07 sau vài ngày, che phần đối chiếu, và chạy lại trọn sáu khâu trên chính đề đó. Làm được lần thứ hai khi đã quên chi tiết mới là dấu hiệu bạn nắm quy trình, chứ không phải nhớ đáp án.
5. 🚀 Sắp tới
Module cuối — Khi code sai — là module chống bỏ cuộc.
Bạn vừa có một quy trình để viết ra lời giải đúng. Nhưng lần đầu gõ ra code, nó sẽ sai. Không phải vì bạn học chưa kỹ — code sai là trạng thái mặc định của mọi người viết chương trình, kể cả người viết hai mươi năm. Cái phân biệt không phải là ai ít sai hơn, mà là ai chẩn đoán nhanh hơn: ba loại lỗi cần ba cách soi khác nhau, thông báo lỗi chỉ chỗ báo chứ thường không chỉ chỗ gây, và cách thoát kẹt là đặt giả thuyết rồi kiểm chứng, không phải sửa mò.
Bắt đầu ở Tổng quan module — khi code sai. Và trước khi sang, thứ đáng làm nhất là cầm một đề bất kỳ bạn tự nghĩ ra — tính tiền điện theo bậc, đếm ngày công trong tháng — và chạy trọn sáu khâu lên nó. Quy trình này chỉ thành của bạn khi bạn dùng nó lên một đề không ai giao.
6. 📚 Đọc thêm
- 4. More Control Flow Tools — Python documentation — mục "Defining Functions" là định nghĩa chính thức của
defvàreturn, nguồn cho bài 5. - Built-in Functions — Python documentation — tra cứu nhanh những hàm dựng sẵn bạn sẽ gặp khi tự làm đề.
- ISO 5807:1985 — Information processing: documentation symbols — tiêu chuẩn quốc tế định nghĩa bộ ký hiệu lưu đồ; bốn ký hiệu ở bài 3 là phần lõi của nó. Trang này chỉ bán bản chuẩn, không đọc miễn phí được — dẫn ở đây để bạn biết ký pháp có gốc tiêu chuẩn, không phải quy ước riêng của khoá.
Bài tiếp theo: Tổng quan module — khi code sai
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên