Vòng Lặp: Khi Mã Bắt Đầu "996", Người Lập Trình Điên Rồ

Vòng Lặp: Sự Sinh Tồn Của Nhân Viên Model Công Việc

Nếu câu lệnh điều kiện là suy nghĩ của mã, thì vòng lặp chính là việc làm việc liên tục - không ngừng nghỉ cho đến khi...chủ nhân hài lòng (hoặc bộ nhớ tràn).

# Trước khi có vòng lặp
print("Viết dòng mã thứ 1")
print("Viết dòng mã thứ 2")
print("Viết dòng mã thứ 3")
# ... (viết tới hàng nghìn dòng rồi tay mỏi)
print("Viết dòng mã thứ 1000, tay đã hỏng")

# Sau khi có vòng lặp
for dem in range(1000):
    print(f"Viết dòng mã thứ {dem+1}, dễ dàng")

Vòng Lặp For: Nhân Viên Chính Xác Tại Thế Giới Mã

2.1 Cơ Bản: Khám Phá Magic Của range()

# Chủ nhân bảo viết "Tôi sẽ không đi muộn" 100 lần
# Phương pháp 1: Cách làm thực tế (không khuyến nghị)
print("Tôi sẽ không đi muộn")
print("Tôi sẽ không đi muộn")
# ... (viết tới lần thứ 50 rồi bị đưa vào bệnh viện)

# Phương pháp 2: Cách của lập trình viên thông minh
for so_lan in range(100):
    print(f"Lần thứ {so_lan+1}: Tôi sẽ không đi muộn (mà không)")

Ba em rể của hàm range():

range(5)           # 0,1,2,3,4 (bắt đầu từ 0 là sự bất chấp của lập trình viên)
range(1, 10)       # 1,2,3,4,5,6,7,8,9 (có đầu nhưng không có cuối)
range(1, 10, 2)    # 1,3,5,7,9 (lập trình viên đếm số nhảy bước)

2.2 Thu Thập Mọi Điều: Thuộc Tính Thu Thập Của Vòng Lặp For

# Duyệt chuỗi (người мастер tách chữ)
for ky_tu in "hello":
    print(f"Chữ cái: {ky_tu}")
# Kết quả: h e l l o (mỗi chữ cái bị "tiết lộ")

# Duyệt danh sách (công cụ điểm danh)
cong_viec = ["ghi bug", "sửa bug", "ẩn bug", "tạo bug mới"]
for viec in cong_viec:
    print(f"Công việc hôm nay: {viec}")
# Kết quả: lại một ngày bao quanh bug

# Duyệt tuple (nỗi đau không thể sửa đổi)
ngay_trong_tuan = ("Thứ Hai", "Thứ Ba", "Thứ Tư", "Thứ Năm", "Thứ Sáu", "Thứ Bảy", "Chủ Nhật")
for ngay in ngay_trong_tuan:
    if ngay in ["Thứ Bảy", "Chủ Nhật"]:
        print(f"{ngay}: giả vờ làm việc")
    else:
        print(f"{ngay}: làm việc thật")

Vòng Lặp While: Người Đương Cuồng Tại Thế Giới Mã

3.1 While Cơ Bản: Không Dừng Cho Đến Khi Thành Công

# Kế hoạch giảm cân của lập trình viên (cảnh báo vòng lặp vô tận!)
can_nang = 80  # cân nặng ban đầu 80kg
can_nang_muc_tieu = 70  # cân nặng mục tiêu

while can_nang > can_nang_muc_tieu:
    print("Hôm nay phải tập luyện!")
    # Nhưng luôn...
    print("Đi qua quán trà sữa...")
    print("Mua một tặng một? Mua hai!")
    can_nang += 1  # giảm cân ngược lại thành công
    
print("Giảm cân thất bại, cân nặng hiện tại:", can_nang)

3.2 "Bẫy Tử Thần" Của While

# Mã nguy hiểm! Không nên sao chép!
# dem = 0
# while dem < 5:
#     print("Tôi đang trong vòng lặp")
#     # quên ghi dem += 1
# Kết quả: in ra vô tận, quạt máy tính bắt đầu bay

Cách viết đúng:

dem = 0
while dem < 5:
    print(f"Lần thứ {dem+1} vòng lặp")
    dem += 1  # đây là cứu tinh!
print("Trốn khỏi vòng lặp thành công!")

Kiểm soát Vòng Lặp: break và continue Là "Kế Hoạch Trốn Tránh"

4.1 break: Gặp Yêu Thương Thì "Trốn Chạy"

# Tìm người duy nhất biết Python trong 100 ứng viên
ung_vien = ["biết Java", "biết C++", "biết PHP", "biết Python!", "biết JavaScript"]

for nguoi in ung_vien:
    print(f"Phỏng vấn: {nguoi}")
    if "Python" in nguoi:
        print("Chọn anh ấy! Kết thúc phỏng vấn!")
        break  # kết thúc vòng lặp ngay lập tức
# Kết quả: tiết kiệm thời gian phỏng vấn 96 ứng viên khác

4.2 continue: "Bỏ Qua Món Ăn Này"

# Ăn buffet, nhưng bỏ qua một số món ăn
mon_an = ["ghẹ", "cà rốt", "núi bò", "đậu xanh", "bánh kem", "broccoli"]

for mon in mon_an:
    if mon in ["cà rốt", "đậu xanh", "broccoli"]:  # các loại rau ghét
        print(f"Bỏ qua {mon}, món tiếp theo!")
        continue  # bỏ qua phần còn lại của vòng lặp này
    print(f"Ăn nhiều: {mon}")
# Kết quả: chỉ ăn thịt và bánh kem, khỏe mạnh? Không tồn tại

Giải thích đơn giản về break và continue:

  • break: chủ nhân đến, tắt ngay cửa sổ game (kết thúc vòng lặp)
  • continue: cấp độ này quá khó, bỏ qua và chơi cấp độ tiếp theo (bỏ qua phần còn lại, tiếp tục vòng lặp)

Vòng Lặp Nhúng: "Búp Bê Nào Nào" Của Mã

# Lập lịch cho tuần làm việc của lập trình viên (vòng lặp hai chiều)
ngay_trong_tuan = ["Thứ Hai", "Thứ Ba", "Thứ Tư", "Thứ Năm", "Thứ Sáu"]
gio_lam_viec = ["9:00", "10:00", "11:00", "14:00", "15:00", "16:00"]

for ngay in ngay_trong_tuan:
    print(f"\n=== Lịch làm việc của {ngay} ===")
    for gio in gio_lam_viec:
        if gio == "12:00":
            print(f"{gio}: giờ nghỉ trưa!")
            continue
        if gio == "18:00" and ngay == "Thứ Sáu":
            print(f"{gio}: về nhà đúng giờ!")
            break  # tích cực nhất vào thứ Sáu
        print(f"{gio}: đang viết mã...")

Tự Thực Hành: Viết Hệ Thống Giám sát Làm Việc Với Vòng Lặp

def he_thong_giam_sat_lam_viec():
    "Giám sát lập trình viên có làm việc chăm chỉ hay không"
    import random
    
    phut_lam_viec = 0
    phut_mo_yeu = 0  # thời gian mo yeu
    
    print("=== Hệ thống giám sát bắt đầu ===")
    
    while phut_lam_viec < 480:  # chế độ làm việc 8 giờ
        # mô phỏng trạng thái làm việc mỗi phút
        dang_lam_viec = random.choice([True, False, False])  # 2/3 thời gian mo yeu
        
        if not dang_lam_viec:
            phut_mo_yeu += 1
            hoat_dong = random.choice(["trao đổi trên Weibo", "xem CSDN", "trò chuyện", "giả vờ suy nghĩ"])
            print(f"[Mo yeu] {hoat_dong}...")
            
            # nếu mo yeu quá lâu, kích hoạt cảnh báo
            if phut_mo_yeu > 30:
                print("\n⚠️ Cảnh báo: Phát hiện mo yeu quá lâu!")
                print("Đang mở IDE tự động...")
                phut_mo_yeu = 0  # đặt lại thời gian mo yeu
                continue  # bỏ qua phần còn lại của vòng lặp này
        else:
            print(f"[Làm việc] phút thứ {phut_lam_viec}: đang viết mã")
            
        phut_lam_viec += 1
        
        # kiểm tra giờ下班
        if phut_lam_viec >= 480:
            print("\n🎉 Giờ下班 đến!")
            break
    
    print(f"\n=== Báo cáo hôm nay ===")
    print(f"Thời gian làm việc tổng cộng: {phut_lam_viec} phút")
    print(f"Thời gian mo yeu: {phut_mo_yeu} phút")
    print(f"Hiệu suất làm việc: {(phut_lam_viec-phut_mo_yeu)/phut_lam_viec*100:.1f}%")
    print("Lời khuyên: cố gắng mo yeu thêm vào ngày mai!")

# chạy hệ thống giám sát
he_thong_giam_sat_lam_viec()

Hướng Dẫn Tránh Hố Và Thực Tiễn Tốt Nhất

7.1 Viết Vòng Lặp Một Cách "Sai Sát" So Với "Tinh Tế"

# ❌ Cách viết sai 1: sửa đổi danh sách đang duyệt
hoa_qua = ["táo", "chuối", "cam"]
for hoa in hoa_qua:
    if hoa == "chuối":
        hoa_qua.remove(hoa)  # có thể gây lỗi khi chạy!
        
# ✅ Cách viết đẹp: duyệt bản sao
for hoa in hoa_qua[:]:  # sử dụng cắt để tạo bản sao
    if hoa == "chuối":
        hoa_qua.remove(hoa)

# ❌ Cách viết sai 2: vòng lặp while vô tận
# while True:
#     print("không dừng lại!")

# ✅ Cách viết đẹp: thiết lập thoát an toàn
so_lan_thu = 1000
lan_thu = 0
while lan_thu < so_lan_thu:
    # làm gì đó
    lan_thu += 1

7.2 Nhận Giải Thích Vui Vẻ Về Vòng Lặp

# vòng lặp này tôi đã debug trong ba ngày
# nếu bạn hiểu được, chúng ta sẽ là anh em
# nếu không hiểu... chúng ta vẫn là anh em, giúp tôi tìm lỗi nào
for i in range(10):
    for j in range(10):
        for k in range(10):
            # chỗ này vốn có logic
            # nhưng tôi quên phải làm gì
            pass  # pass là lá cờ trắng của lập trình viên

Kết Luận: Vòng Lặp Làm Cho Mã "Cuộn" Lên

Kiểu vòng lặp Mô phỏng Trường hợp sử dụng
for nhân viên dòng sản xuất chính xác lặp lại với số lần đã biết
while chiến sĩ marathon kiên trì lặp lại khi điều kiện thỏa mãn
break cửa thoát khẩn cấp kết thúc sớm vòng lặp
continue nút bỏ qua quảng cáo bỏ qua vòng lặp hiện tại

Lời Khuyên Cuối Cùng Về Vòng Lặp:

  1. vòng lặp for: khi bạn biết rõ số lần cần lặp lại
  2. vòng lặp while: khi bạn không biết số lần, nhưng có điều kiện dừng
  3. range(): trợ lý số của bạn, bắt đầu từ 0 là đức tin truyền thống
  4. break/continue: "đạo thoát hiểm" và "bỏ qua cấp độ" trong vòng lặp
# triết lý vòng lặp của lập trình viên
while True:
    if co_bug:
        sua_bug()
    elif khong_co_bug:
        viet_chuc_nang_moi()  # tạo ra bug mới
    else:
        break  # tình huống này không tồn tại, nên sẽ không bao giờ break

Thẻ: python vòng-lặp for-loop while-loop break

Đăng vào ngày 29 tháng 5 lúc 23:07