✂️ 7.3 Kết hợp break, continue
📖 Giới thiệu
break và continue là hai lệnh giúp kiểm soát luồng chạy của vòng lặp. break thoát khỏi vòng lặp ngay lập tức, còn continue bỏ qua phần còn lại và chuyển sang lần lặp tiếp theo.
Mục tiêu bài học:
- Hiểu cách hoạt động của
breakvàcontinue - Biết khi nào sử dụng từng lệnh
- Kết hợp với điều kiện để kiểm soát vòng lặp
- Áp dụng vào bài toán thực tế
🔧 Cú pháp
1. 🚪 break - Thoát vòng lặp
python
# Với while
while điều_kiện:
# Code
if điều_kiện_thoát:
break # Thoát ngay lập tức
# Code này có thể không chạy
# Với for
for item in danh_sach:
# Code
if điều_kiện_thoát:
break # Thoát ngay lập tức
# Code này có thể không chạy2. ⏭️ continue - Bỏ qua lần lặp
python
# Với while
while điều_kiện:
# Code trước continue
if điều_kiện_bỏ_qua:
continue # Bỏ qua, quay lại đầu vòng lặp
# Code này sẽ bị bỏ qua nếu continue chạy
# Với for
for item in danh_sach:
# Code trước continue
if điều_kiện_bỏ_qua:
continue # Bỏ qua, chuyển sang item tiếp theo
# Code này sẽ bị bỏ qua nếu continue chạy🔬 Phân tích & Giải thích chi tiết
1. 🚪 break trong thực tế
python
# Tìm số trong danh sách
numbers = [1, 3, 7, 9, 12, 15, 18]
tim_so = 12
print("Tìm số 12 trong danh sách:")
for i, so in enumerate(numbers):
print(f"Kiểm tra vị trí {i}: {so}")
if so == tim_so:
print(f"✅ Tìm thấy {tim_so} ở vị trí {i}!")
break # Dừng tìm kiếm
print(f" {so} ≠ {tim_so}, tiếp tục...")
else:
# Chạy khi vòng for kết thúc mà không break
print(f"❌ Không tìm thấy {tim_so}")
print("Kết thúc tìm kiếm")2. ⏭️ continue trong thực tế
python
# In số lẻ từ 1 đến 10
print("Các số lẻ từ 1 đến 10:")
for so in range(1, 11):
if so % 2 == 0: # Số chẵn
continue # Bỏ qua, không in
print(f"Số lẻ: {so}")
print("Hoàn thành!")3. 🔄 So sánh break vs continue
python
print("=== DEMO BREAK ===")
for i in range(1, 6):
if i == 3:
print(f"Gặp {i}, dùng break!")
break
print(f"Số: {i}")
print("Sau vòng lặp break\n")
print("=== DEMO CONTINUE ===")
for i in range(1, 6):
if i == 3:
print(f"Gặp {i}, dùng continue!")
continue
print(f"Số: {i}")
print("Sau vòng lặp continue")
# Kết quả:
# BREAK: 1, 2, dừng ở 3
# CONTINUE: 1, 2, bỏ qua 3, 4, 5💻 Ví dụ minh họa
Ví dụ 1: Máy ATM với break
python
# may_atm_break.py
print("🏦 MÁY ATM")
print("=" * 15)
so_du = 500000
max_lan_sai = 3
lan_sai = 0
pin_dung = "1234"
# Đăng nhập với giới hạn sai
while lan_sai < max_lan_sai:
pin = input(f"Nhập PIN (lần {lan_sai + 1}/{max_lan_sai}): ")
if pin == pin_dung:
print("✅ Đăng nhập thành công!")
break # Thoát vòng đăng nhập
else:
lan_sai += 1
print(f"❌ PIN sai! Còn {max_lan_sai - lan_sai} lần thử.")
if lan_sai >= max_lan_sai:
print("🚨 Tài khoản bị khóa!")
break # Thoát vì quá số lần
else:
# Chạy khi while kết thúc tự nhiên
print("🚨 Hết lần thử!")
# Nếu đăng nhập thành công
if lan_sai < max_lan_sai and pin == pin_dung:
print(f"\n💰 Số dư: {so_du:,} VND")
print("Giao dịch hoàn tất!")Ví dụ 2: Lọc danh sách với continue
python
# loc_danh_sach.py
print("📋 LỌC DANH SÁCH HỌC SINH")
print("=" * 30)
hoc_sinh = [
{"ten": "An", "diem": 8.5, "tuoi": 16},
{"ten": "Bình", "diem": 5.0, "tuoi": 17},
{"ten": "Chi", "diem": 9.0, "tuoi": 15},
{"ten": "Dũng", "diem": 6.5, "tuoi": 18},
{"ten": "Emy", "diem": 7.5, "tuoi": 16},
]
print("🏆 DANH SÁCH HỌC SINH GIỎI (điểm >= 7.0):")
print("-" * 40)
so_hoc_sinh_gioi = 0
for hs in hoc_sinh:
# Bỏ qua học sinh yếu
if hs["diem"] < 7.0:
print(f"❌ {hs['ten']}: {hs['diem']} điểm (không đủ điều kiện)")
continue # Bỏ qua, không xử lý tiếp
# Chỉ xử lý học sinh giỏi
so_hoc_sinh_gioi += 1
xep_loai = "Xuất sắc" if hs["diem"] >= 9.0 else "Giỏi"
print(f"✅ {hs['ten']}: {hs['diem']} điểm - {xep_loai} ({hs['tuoi']} tuổi)")
print(f"\n📊 Tổng học sinh giỏi: {so_hoc_sinh_gioi}/{len(hoc_sinh)}")Ví dụ 3: Game đoán số với break/continue
python
# game_doan_so_advanced.py
import random
print("🎮 GAME ĐOÁN SỐ NÂNG CAO")
print("=" * 30)
while True: # Game chạy mãi
so_bi_mat = random.randint(1, 20)
max_lan_doan = 5
lan_doan = 0
print(f"\n🎯 Số mới từ 1-20! Bạn có {max_lan_doan} lần đoán.")
# Vòng đoán số
while lan_doan < max_lan_doan:
lan_doan += 1
try:
guess = int(input(f"Lần {lan_doan}: Số bạn đoán: "))
except ValueError:
print("❌ Vui lòng nhập số!")
lan_doan -= 1 # Không tính lần này
continue # Thử lại
# Kiểm tra phạm vi
if guess < 1 or guess > 20:
print("❌ Số phải từ 1-20!")
lan_doan -= 1 # Không tính lần này
continue # Thử lại
# Kiểm tra kết quả
if guess == so_bi_mat:
print(f"🎉 ĐÚNG RỒI! Số đó là {so_bi_mat}")
print(f"🏆 Bạn đoán đúng sau {lan_doan} lần!")
break # Thoát vòng đoán
elif guess < so_bi_mat:
print("📈 Số cần tìm LỚN HƠN!")
else:
print("📉 Số cần tìm NHỎ HƠN!")
# Hiển thị số lần còn lại
con_lai = max_lan_doan - lan_doan
if con_lai > 0:
print(f"💡 Còn {con_lai} lần đoán")
# Nếu hết lần đoán
if lan_doan >= max_lan_doan and guess != so_bi_mat:
print(f"💥 HẾT LƯỢT! Số đúng là {so_bi_mat}")
# Hỏi chơi tiếp
while True:
choi_tiep = input("\n🔄 Chơi lại? (y/n): ").lower()
if choi_tiep in ['y', 'yes']:
break # Thoát vòng hỏi, tiếp tục game
elif choi_tiep in ['n', 'no']:
print("👋 Cảm ơn bạn đã chơi!")
exit() # Thoát hoàn toàn
else:
print("❌ Vui lòng nhập 'y' hoặc 'n'")
continue # Hỏi lại🏋️ Thực hành
Bài tập 1: Tìm số nguyên tố đầu tiên
Nhiệm vụ: Tìm số nguyên tố đầu tiên lớn hơn n
python
n = int(input("Tìm số nguyên tố đầu tiên lớn hơn: "))
so_hien_tai = n + 1
while True:
# Kiểm tra xem so_hien_tai có phải nguyên tố không
la_nguyen_to = True
if so_hien_tai < 2:
la_nguyen_to = False
else:
for i in range(2, int(so_hien_tai ** 0.5) + 1):
if so_hien_tai % i == 0:
la_nguyen_to = False
break # Thoát vòng for
if la_nguyen_to:
print(f"Số nguyên tố đầu tiên lớn hơn {n} là: {so_hien_tai}")
break # Thoát vòng while
so_hien_tai += 1Bài tập 2: Lọc số chẵn
Nhiệm vụ: In số chẵn từ 1 đến 20, bỏ qua số chia hết cho 6
python
print("Số chẵn từ 1-20, bỏ qua số chia hết cho 6:")
for so in range(1, 21):
# Bỏ qua số lẻ
if so % 2 != 0:
continue
# Bỏ qua số chia hết cho 6
if so % 6 == 0:
print(f" Bỏ qua {so} (chia hết cho 6)")
continue
print(f"✅ {so}")Bài tập 3: Menu với validation
Nhiệm vụ: Menu chỉ chấp nhận lựa chọn hợp lệ
python
diem = 0
while True:
print(f"\n🎯 Điểm hiện tại: {diem}")
print("1. Tăng điểm")
print("2. Giảm điểm")
print("3. Xem điểm")
print("0. Thoát")
lua_chon = input("Chọn (0-3): ").strip()
# Kiểm tra đầu vào rỗng
if not lua_chon:
print("❌ Vui lòng nhập lựa chọn!")
continue
# Kiểm tra lựa chọn hợp lệ
if lua_chon not in ["0", "1", "2", "3"]:
print("❌ Lựa chọn không hợp lệ!")
continue
# Xử lý lựa chọn
if lua_chon == "0":
print("👋 Tạm biệt!")
break
elif lua_chon == "1":
diem += 1
print("⬆️ Tăng điểm!")
elif lua_chon == "2":
diem -= 1
print("⬇️ Giảm điểm!")
elif lua_chon == "3":
print(f"📊 Điểm hiện tại: {diem}")📋 Tóm tắt
So sánh break và continue:
| Lệnh | Tác dụng | Khi nào dùng | Ví dụ |
|---|---|---|---|
| break | Thoát vòng lặp | Tìm thấy kết quả, gặp lỗi | Tìm kiếm, validation |
| continue | Bỏ qua lần lặp hiện tại | Lọc dữ liệu, điều kiện đặc biệt | Lọc số chẵn/lẻ |
Patterns thường dùng:
python
# Pattern 1: Tìm kiếm với break
for item in danh_sach:
if item == tim_kiem:
print("Tìm thấy!")
break
else:
print("Không tìm thấy!")
# Pattern 2: Lọc với continue
for item in danh_sach:
if khong_phu_hop(item):
continue
xu_ly(item)
# Pattern 3: Menu với break
while True:
lua_chon = input("Menu: ")
if lua_chon == "exit":
break
xu_ly_lua_chon(lua_chon)
# Pattern 4: Validation với continue
while True:
gia_tri = input("Nhập: ")
if khong_hop_le(gia_tri):
continue
breakLưu ý quan trọng:
- 🎯 Phạm vi: break/continue chỉ ảnh hưởng vòng lặp gần nhất
- 🔄 Vòng lặp lồng: Cần break nhiều lần để thoát hết
- ✨ else với for/while: Chạy khi vòng lặp kết thúc tự nhiên (không break)
- 🚨 Dùng cẩn thận: Đừng lạm dụng, code có thể khó đọc
Chuẩn bị cho bài tiếp theo:
Bài tiếp theo sẽ học về 🏋️ Bài tập luyện tập - áp dụng tất cả kiến thức về while!
💡 Mẹo: break để thoát sớm, continue để bỏ qua - hai công cụ mạnh mẽ!
✂️ Thực hành: Thử thay đổi break thành continue và ngược lại để hiểu sự khác biệt!