for-else và while-else - else khi nào chạy?
Hiện tượng lạ
Phần tiêu đề “Hiện tượng lạ”# Tìm số chẵnfor num in [1, 3, 5, 7]: if num % 2 == 0: print("Found even!") breakelse: print("No even found") # In ra ✅
# Tìm số chẵnfor num in [1, 2, 3, 4]: if num % 2 == 0: print("Found even!") breakelse: print("No even found") # KHÔNG in ra!What the Python?! else sau for?! Và chỉ chạy khi KHÔNG break?! 🤔
Giải thích
Phần tiêu đề “Giải thích”else chạy khi loop HOÀN THÀNH BÌNH THƯỜNG
Phần tiêu đề “else chạy khi loop HOÀN THÀNH BÌNH THƯỜNG”# else chạy khi:# - Loop kết thúc tự nhiên (không break)# - Hoặc loop không chạy (empty iterable)
# else KHÔNG chạy khi:# - breakfor-else
Phần tiêu đề “for-else”Ví dụ: Tìm kiếm
Phần tiêu đề “Ví dụ: Tìm kiếm”def find_item(items, target): for item in items: if item == target: print(f"Found {target}!") break else: print(f"{target} not found")
find_item([1, 2, 3], 2) # Found 2!find_item([1, 2, 3], 5) # 5 not foundThay thế flag pattern
Phần tiêu đề “Thay thế flag pattern”# ❌ Cách cũfound = Falsefor item in items: if item == target: found = True break
if not found: print("Not found")
# ✅ Pythonicfor item in items: if item == target: breakelse: print("Not found")while-else
Phần tiêu đề “while-else”count = 0while count < 5: print(count) count += 1 if count == 3: breakelse: print("Finished naturally") # Không chạy (vì break)Khi nào dùng?
Phần tiêu đề “Khi nào dùng?”✅ Search với fallback
Phần tiêu đề “✅ Search với fallback”for user in users: if user.id == target_id: process(user) breakelse: print("User not found")✅ Kiểm tra điều kiện
Phần tiêu đề “✅ Kiểm tra điều kiện”# Kiểm tra số nguyên tốdef is_prime(n): if n < 2: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False # break else: return True # Loop hoàn thành → Prime!
print(is_prime(7)) # Trueprint(is_prime(10)) # FalseConfusion với if-else
Phần tiêu đề “Confusion với if-else”# if-else: else khi condition Falseif condition: ...else: ... # Chạy khi condition False
# for-else: else khi KHÔNG breakfor item in items: if ...: breakelse: ... # Chạy khi KHÔNG breakTóm tắt
Phần tiêu đề “Tóm tắt”for-else / while-else:
elsechạy khi loop HOÀN THÀNH (không break)- ✅ Dùng cho search với fallback
- ⚠️ Khác với if-else!
Pattern:
for item in items: if found: breakelse: handle_not_found()