Skip to content

✂️ 7.3 Kết hợp break, continue

📖 Giới thiệu

breakcontinue 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 breakcontinue
  • 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ạy

2. ⏭️ 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 += 1

Bà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ệnhTác dụngKhi nào dùngVí dụ
breakThoát vòng lặpTìm thấy kết quả, gặp lỗiTìm kiếm, validation
continueBỏ qua lần lặp hiện tạiLọc dữ liệu, điều kiện đặc biệtLọ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
    break

Lưu ý quan trọng:

  1. 🎯 Phạm vi: break/continue chỉ ảnh hưởng vòng lặp gần nhất
  2. 🔄 Vòng lặp lồng: Cần break nhiều lần để thoát hết
  3. ✨ else với for/while: Chạy khi vòng lặp kết thúc tự nhiên (không break)
  4. 🚨 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!

🐍 Khóa học Python căn bản bằng tiếng Việt