Tin học lớp 4-5 - Bài 13: Bảng cửu chương với vòng lặp lồng nhau (Python & Toán)

Bài 13: Bảng cửu chương — sức mạnh của vòng lặp lồng nhau

🎯 Mục tiêu bài học: Em sẽ học cách đặt một vòng lặp bên trong một vòng lặp khác (gọi là vòng lặp lồng nhau) để máy tính tự in ra cả bảng cửu chương — thứ mà bình thường em phải chép tay rất lâu!
for hang in ...: ← vong NGOAI for cot in ...: ← vong TRONG print(hang, "x", cot, "=", hang*cot) (việc lặp lại nhiều lần nhất) Mỗi lần vòng NGOÀI chạy 1 bước, vòng TRONG chạy HẾT một lượt Vòng lặp lồng nhau: một vòng nằm gọn bên trong vòng kia — như bảng có hàng và cột.
Ở Chặng 2 em đã biết vòng lặp for giúp làm một việc lặp đi lặp lại. Hôm nay ta ghép hai vòng lặp lại với nhau. Nghe thì "ghê", nhưng thật ra chỉ giống như một cuốn lịch: mỗi tháng (vòng ngoài) lại có nhiều ngày (vòng trong)!

1. Ôn lại: một vòng lặp in bảng nhân 2

Trước hết, hãy dùng một vòng lặp để in bảng nhân 2. Biến cot lần lượt nhận các giá trị 1, 2, 3... nhờ range.
for cot in range(1, 11):
    print("2 x", cot, "=", 2 * cot)
✎ Nhớ lại: range(1, 11) cho các số từ 1 đến 10 (số cuối 11 KHÔNG được lấy). Vậy vòng này in 10 dòng của bảng nhân 2.
Bảng nhân 2 2 x 1= 2 2 x 2= 4 2 x 3= 6 2 x 4= 8 ...... Vòng trong chạy cot = 1, 2, 3, ... để in từng ô của một dòng Vòng ngoài đổi hang = 2, 3, 4, ... để làm từng bảng nhân Máy tự in cả bảng cửu chương chỉ với vài dòng lệnh — nhanh hơn chép tay rất nhiều!

2. Vòng lặp lồng nhau là gì?

Nếu muốn in bảng nhân 2, 3, 4... tới 9, ta không cần chép đoạn trên nhiều lần. Ta đặt vòng lặp bảng nhân vào trong một vòng lặp lớn hơn. Vòng lớn (ngoài) đổi hang; vòng nhỏ (trong) đổi cot.
for hang in range(2, 5):          # vong NGOAI: bang 2,3,4
    for cot in range(1, 4):      # vong TRONG: cot 1,2,3
        print(hang, "x", cot, "=", hang * cot)
✎ Chú ý phần thụt lề: vòng trong thụt vào so với vòng ngoài, và lệnh print thụt sâu nhất. Thụt lề chính là cách Python biết lệnh nào nằm trong vòng nào!

3. Máy chạy theo thứ tự nào?

Quy tắc vàng: Mỗi khi vòng NGOÀI nhích một bước, vòng TRONG phải chạy HẾT một lượt. Với ví dụ trên (hang = 2, 3, 4 và cot = 1, 2, 3), máy in ra:
# hang = 2
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
# hang = 3
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
# hang = 4
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
✎ Tổng cộng máy in 9 dòng: vòng ngoài chạy 3 lần, mỗi lần vòng trong in 3 dòng → 3 × 3 = 9.

4. Trang trí cho đẹp hơn

Ta có thể in thêm dòng tiêu đề mỗi khi bắt đầu một bảng mới, đặt trong vòng NGOÀI (không phải vòng trong).
for hang in range(2, 5):
    print("--- Bang nhan", hang, "---")
    for cot in range(1, 11):
        print(hang, "x", cot, "=", hang * cot)
✎ Dòng tiêu đề nằm ở vòng NGOÀI nên chỉ in một lần cho mỗi bảng. Nếu để nhầm vào vòng trong, nó sẽ bị in lặp lại mỗi dòng — rối mắt lắm!

5. Bảng ghi nhớ

Khái niệmÝ nghĩa
Vòng lặp lồng nhauMột vòng for nằm bên trong một vòng for khác
Vòng ngoàiChạy chậm hơn; mỗi bước kích hoạt cả vòng trong
Vòng trongChạy hết một lượt cho mỗi bước của vòng ngoài
Số dòng in ra(số bước ngoài) × (số bước trong)
Thụt lềQuyết định lệnh nào thuộc vòng nào

🎯 Phần A — Trắc nghiệm kiểm tra

Câu 1. "Vòng lặp lồng nhau" nghĩa là gì?

Vòng lặp lồng nhau là khi ta đặt một vòng for vào trong thân của một vòng for khác — giống hộp nhỏ nằm trong hộp lớn.

Câu 2. Với đoạn mã sau, câu lệnh print chạy tổng cộng bao nhiêu lần?
for h in range(2, 5):
    for c in range(1, 4):
        print(h, c)

range(2, 5) có 3 số (2,3,4). range(1, 4) có 3 số (1,2,3). Vòng ngoài 3 lần × vòng trong 3 lần = 9 lần.

Câu 3. Quy tắc chạy của vòng lặp lồng nhau là gì?

Cứ mỗi lần vòng ngoài nhích một bước, vòng trong lại chạy trọn vẹn từ đầu đến cuối một lượt. Đó là quy tắc vàng của vòng lặp lồng nhau.

Câu 4. Trong Python, nhờ đâu máy biết một lệnh nằm trong vòng lặp nào?

Python dựa vào thụt lề để hiểu cấu trúc. Lệnh thụt sâu hơn thì nằm trong vòng lặp bên ngoài nó. Thụt sai là chạy sai ngay!

Câu 5. Muốn in dòng tiêu đề "--- Bang nhan 2 ---" một lần cho mỗi bảng, ta đặt lệnh print đó ở đâu?

Đặt trong vòng NGOÀI (trước vòng trong) thì tiêu đề in đúng một lần mỗi bảng. Nếu đặt trong vòng trong, nó sẽ bị lặp lại ở mỗi dòng.

💻 Phần B — Phòng lập trình: In bảng cửu chương

Đoạn mã dưới in bảng nhân 2, 3, 4 (mỗi bảng tới ×5) bằng vòng lặp lồng nhau. Bấm Chạy để xem. Sau đó thử đổi range(2, 5) thành range(2, 10) để in đủ bảng cửu chương từ 2 đến 9 nhé!

(Kết quả sẽ hiện ở đây sau khi em bấm Chạy)
🎉 Thử thách: Em hãy thử đếm xem: nếu in bảng nhân từ 2 đến 9, mỗi bảng ×1 đến ×10, thì máy in tổng cộng bao nhiêu dòng phép nhân? (Gợi ý: 8 bảng × 10 dòng = ?). Sửa mã và chạy thử để kiểm tra dự đoán của em!