Tổng quan module — rẽ nhánh và lặp
Máy đã biết chạy tuần tự từng dòng. Module này thêm hai việc còn lại: chọn đường đi và làm lại nhiều lần — cùng hai loại lỗi ngốn nhiều giờ nhất của người mới.
TL;DR: Module này thêm hai cấu trúc điều khiển cuối cùng vào cỗ máy bạn dựng ở module trước: rẽ nhánh để chọn đúng một đường trong nhiều đường, và lặp để làm lại một việc tới khi điều kiện hết đúng. Sáu bài đi từ if/elif/else và ba cái bẫy điều kiện kinh điển, qua while và for, tới vòng lặp lồng nhau và lỗi lệch một đơn vị, rồi kết ở một mini challenge bạn tự trace không có ai điền sẵn hàng nào. Điểm chung của mọi lỗi trong module: chúng không báo lỗi dòng nào, chương trình vẫn chạy, chỉ kết quả là sai.
1. Bạn vừa có gì, và còn thiếu gì
Hết module trước, bạn đã có một cỗ máy trong đầu: nó chạy đúng từng dòng theo thứ tự, giữ giá trị trong những ô nhớ có tên, và bạn tự chạy nó bằng tay được bằng bảng trace.
Nhưng cỗ máy đó mới làm được đúng một kiểu chương trình: chạy thẳng từ dòng đầu tới dòng cuối, không rẽ, không quay lại. Mọi chương trình thật đều cần thêm hai việc nữa. Nó phải chọn đường: nhập sai mật khẩu thì báo lỗi, nhập đúng thì cho vào. Và nó phải làm lại — tính tiền cho một nghìn đơn hàng thì không ai viết một nghìn dòng.
Hai việc đó là toàn bộ nội dung module này.
2. Ba cấu trúc, hết
Điều đáng ngạc nhiên: chỉ có ba cấu trúc điều khiển, và bạn đã học xong một cái rồi.

Tuần tự, rẽ nhánh, lặp. Trình duyệt bạn đang mở, game bạn chơi, app ngân hàng bạn chuyển tiền — tất cả chỉ là ba thứ này ghép lại với nhau, nhiều tầng, rất nhiều lần. Không có cấu trúc thứ tư nào đợi bạn ở module sau, và đó là một tin tốt: bạn sắp học nốt phần còn lại của bộ ba.
3. Sáu bài trong module này
- Bài 1: Rẽ nhánh. Bạn trace được luồng chạy qua
if,elif,else, và chỉ ra đúng nhánh nào máy không hề ngó tới. - Bài 2: Điều kiện phức hợp. Bạn nhận ra ba lỗi điều kiện kinh điển — trong đó có một lỗi khiến chương trình chạy ngon lành mà kết quả luôn sai, không báo lỗi dòng nào.
- Bài 3: Vòng lặp while. Bạn đếm đúng số vòng một vòng lặp chạy, và nhận ra ngay từ lúc đọc code khi nào nó sẽ chạy mãi không dừng.
- Bài 4: for và danh sách. Bạn trace được biến lặp và biến tích luỹ — hai vai khác hẳn nhau mà người mới hay gộp làm một.
- Bài 5: Lặp lồng nhau. Bạn tính đúng số lần thân trong chạy, và tìm ra chỗ lệch một đơn vị làm vòng lặp thừa hoặc thiếu đúng một vòng.
- Bài 6: Mini challenge — trace vòng lặp lồng. Không giảng gì thêm: một đoạn code, một tờ giấy, và bạn tự nói đúng nó in ra gì.
Bài cuối — Tổng kết — gom cả sáu bài thành một trang để bạn tự chấm trước khi sang module sau.
4. Học xong module này bạn làm được gì
- Trace luồng chạy qua
if/elif/elsevà chỉ ra nhánh nào không hề chạy. - Diagnose ba lỗi điều kiện kinh điển: viết
x == 1 or 2, phủ định sai, và so sánh chuỗi với số. - Predict số vòng một vòng lặp
whilechạy, và nhận ra vòng lặp không bao giờ dừng. - Trace biến lặp và biến tích luỹ qua một vòng
fortrên danh sách. - Diagnose lỗi lệch một đơn vị trong vòng lặp, và chỉ ra vòng nào thừa hoặc thiếu.
- Predict số lần thân trong chạy của một vòng lặp lồng, và giải thích vì sao là
nnhânm.
5. Cách học module này hiệu quả
- Giấy bút vẫn nằm cạnh máy. Bảng trace từ module trước quay lại ngay ở bài 1, và mỗi bài lại thêm cho nó một cột: nhánh nào chạy, vòng thứ mấy, biến tích luỹ tới đâu.
- Mỗi ô "Thử đoán" trong bài giấu kết quả sau một nút bấm. Viết con số bạn tin ra giấy trước rồi mới bấm — đoán trong đầu rồi gật gù "ừ đúng rồi" là tự lừa mình, và bạn sẽ phát hiện ra điều đó ở bài 6 khi không còn ai đoán hộ.
- Đọc đúng thứ tự 01 tới 06. Bài 3 dùng lại nguyên khối phép gán của module trước, bài 5 cần cả bài 3 lẫn bài 4.
- Vẫn không cần cài gì. Mọi output in trong bài là output thật, chép nguyên văn.
Bắt đầu: Bài 1 — Rẽ nhánh.
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