🔁
Vòng Lặp
Chapter 6
Vòng Lặp
for & while
Dạy Python làm đi làm lại một việc mà không cần bạn gõ hàng trăm lần!
Phần 1 — Tại sao cần vòng lặp?
Không có vòng lặp — Code rất đau khổ!
Tưởng tượng bạn cần in bảng cửu chương 2 — không có vòng lặp, bạn phải viết:
# ❌ Không có vòng lặp — 10 dòng lặp đi lặp lại! print(f"2 x 1 = {2*1}") print(f"2 x 2 = {2*2}") print(f"2 x 3 = {2*3}") # ... còn 7 dòng nữa 😭
# ✅ Có vòng lặp — chỉ 2 dòng! for i in range(1, 11): print(f"2 x {i} = {2*i}")
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10 ... đến 2 x 10 = 20
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10 ... đến 2 x 10 = 20
🎵
Vòng lặp = Nút repeat trên máy nghe nhạc
Bạn không phải nhấn play 100 lần — chỉ cần bật repeat và chỉ định lặp bao nhiêu lần. Vòng lặp trong Python hoạt động đúng như vậy!
Phần 2 — Vòng lặp for
Vòng lặp for — Duyệt qua từng phần tử
Dùng for khi bạn biết trước cần lặp bao nhiêu lần hoặc muốn duyệt qua một danh sách:
1
2
3
4
5
↑ for i in [1, 2, 3, 4, 5] — duyệt lần lượt từng ô ↑
# Duyệt qua danh sách trực tiếp mon_hoc = ["Toán", "Văn", "Anh", "Lý"] for mon in mon_hoc: print(f"📚 Môn: {mon}") print("---") # Duyệt qua chuỗi chữ for chu in "Python": print(chu, end=" ")
📚 Môn: Toán
📚 Môn: Văn
📚 Môn: Anh
📚 Môn: Lý
---
P y t h o n
📚 Môn: Văn
📚 Môn: Anh
📚 Môn: Lý
---
P y t h o n
Hàm range() — Tạo dãy số tự động
Hàm range() tạo ra một dãy số, dùng kèm với for để lặp chính xác số lần bạn muốn:
range(5)
0 đến 4 (5 số)
0 1 2 3 4
range(1, 6)
1 đến 5
1 2 3 4 5
range(0, 10, 2)
Bước nhảy 2
0 2 4 6 8
# range(start, stop, step) # Đếm ngược từ 5 về 1 for i in range(5, 0, -1): print(f"🚀 Đếm ngược: {i}") print("💥 Phóng!") # Tính tổng 1+2+...+100 tong = 0 for i in range(1, 101): tong += i print(f"Tổng 1→100 = {tong}")
🚀 Đếm ngược: 5
🚀 Đếm ngược: 4
🚀 Đếm ngược: 3
🚀 Đếm ngược: 2
🚀 Đếm ngược: 1
💥 Phóng!
Tổng 1→100 = 5050
🚀 Đếm ngược: 4
🚀 Đếm ngược: 3
🚀 Đếm ngược: 2
🚀 Đếm ngược: 1
💥 Phóng!
Tổng 1→100 = 5050
Phần 3 — Vòng lặp while
Vòng lặp while — Lặp cho đến khi điều kiện sai
Dùng while khi bạn không biết trước cần lặp bao nhiêu lần — chỉ biết điều kiện dừng:
# Đếm tiền tiết kiệm mỗi tuần tien = 0 tuan = 0 muc_tieu = 500000 while tien < muc_tieu: tien += 50000 # tiết kiệm 50k/tuần tuan += 1 print(f"Tuần {tuan}: {tien:,}đ") print(f"🎉 Đạt mục tiêu sau {tuan} tuần!")
Tuần 1: 50,000đ
Tuần 2: 100,000đ
... (tiếp tục)
Tuần 10: 500,000đ
🎉 Đạt mục tiêu sau 10 tuần!
Tuần 2: 100,000đ
... (tiếp tục)
Tuần 10: 500,000đ
🎉 Đạt mục tiêu sau 10 tuần!
Cảnh báo: Vòng lặp vô tận!
Nếu điều kiện while luôn luôn đúng, chương trình sẽ chạy mãi mãi không dừng. Luôn đảm bảo có thứ gì đó thay đổi để điều kiện trở thành False! Nhấn Ctrl+C để dừng khẩn cấp.
break và continue — Điều khiển vòng lặp
Hai từ khóa giúp bạn kiểm soát linh hoạt vòng lặp:
# break — thoát khỏi vòng lặp ngay lập tức print("=== Tìm số chẵn đầu tiên > 10 ===") for i in range(11, 20): if i % 2 == 0: print(f"Tìm thấy: {i}") break # dừng ngay, không cần duyệt thêm # continue — bỏ qua vòng lặp hiện tại, đi tiếp print("=== Chỉ in số lẻ từ 1-10 ===") for i in range(1, 11): if i % 2 == 0: continue # bỏ qua số chẵn print(i, end=" ")
=== Tìm số chẵn đầu tiên > 10 ===
Tìm thấy: 12
=== Chỉ in số lẻ từ 1-10 ===
1 3 5 7 9
Tìm thấy: 12
=== Chỉ in số lẻ từ 1-10 ===
1 3 5 7 9
Khi nào dùng for? Khi nào dùng while?
🔢 Dùng for khi...
- Biết trước số lần lặp
- Duyệt qua danh sách
- Dùng range() với số cố định
- Ví dụ: in bảng cửu chương, duyệt danh sách học sinh
⏳ Dùng while khi...
- Không biết trước số lần lặp
- Lặp cho đến khi điều kiện thỏa
- Chờ người dùng nhập đúng
- Ví dụ: game đoán số nhiều lần, menu chờ thoát
🚀 Dự án nhỏ
Bảng cửu chương + Trò chơi đoán số nâng cấp
# Bảng cửu chương bất kỳ n = int(input("Nhập bảng cửu chương muốn xem: ")) print(f"\n{'='*25}") print(f" BẢNG CỬU CHƯƠNG {n}") print(f"{'='*25}") for i in range(1, 11): print(f" {n} x {i:2} = {n*i:3}") # Game đoán số — nhiều lượt! bi_mat = 42 luot = 0 print("\n🎯 Đoán số bí mật từ 1-100!") while True: doan = int(input("Nhập số đoán: ")) luot += 1 if doan == bi_mat: print(f"🎉 Đúng rồi! Bạn đoán {luot} lần.") break elif doan < bi_mat: print("📈 Cao hơn!") else: print("📉 Thấp hơn!")
while True + break — Combo phổ biến!
while True tạo vòng lặp chạy mãi, rồi dùng break để thoát khi điều kiện thỏa. Đây là pattern rất phổ biến trong game và menu!
🧩 Kiểm tra nhanh!
Bạn đã thành thạo vòng lặp chưa?
range(1, 5) tạo ra dãy số nào?→ 1, 2, 3, 4
Từ khóa nào thoát ngay khỏi vòng lặp?
→ break
→ break
Dùng for hay while khi lặp số lần chưa biết trước?
→ while
→ while
continue làm gì trong vòng lặp?→ Bỏ qua lần lặp hiện tại