Vòng lặp for và while: cách để máy tính lặp lại công việc

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Sức mạnh lớn nhất của máy tính là làm một việc hàng triệu lần mà không kêu ca. Để tận dụng điều đó, bạn cần vòng lặp. Thay vì viết 100 dòng giống nhau, bạn chỉ viết một lần và nói máy lặp lại.

Vòng lặp for: biết trước số lần

Dùng for khi bạn biết cần lặp bao nhiêu lần hoặc cần duyệt qua một tập phần tử. Trong Python:

for i in range(5):
    print("Lần", i)

ten = ["An", "Bình", "Chi"]
for t in ten:
    print("Xin chào", t)

range(5) sinh ra các số 0, 1, 2, 3, 4 (không gồm 5). Rất nhiều lập trình viên mới nhầm điểm này nên hãy nhớ: chỉ số trong lập trình thường bắt đầu từ 0.

Trong JavaScript hay C, vòng for kinh điển có ba phần:

for (let i = 0; i < 5; i++) {
  console.log("Lần", i);
}

Ba phần là: khởi tạo (i = 0), điều kiện tiếp tục (i < 5), và bước nhảy (i++).

Vòng lặp while: lặp khi điều kiện còn đúng

Dùng while khi bạn không biết trước số lần, ví dụ hỏi người dùng đến khi họ nhập đúng:

mat_khau = ""
while mat_khau != "123456":
    mat_khau = input("Nhập mật khẩu: ")
print("Đăng nhập thành công")

Vòng lặp kiểm tra điều kiện trước mỗi lượt. Nếu điều kiện luôn đúng, chương trình sẽ chạy mãi, đó là vòng lặp vô hạn. Luôn đảm bảo có thứ gì đó bên trong làm điều kiện cuối cùng thành sai.

break và continue

Hai lệnh giúp điều khiển vòng lặp linh hoạt hơn:

  • break: thoát hẳn khỏi vòng lặp ngay lập tức.
  • continue: bỏ qua phần còn lại của lượt hiện tại và sang lượt kế tiếp.
for n in range(1, 11):
    if n % 2 == 0:
        continue       # bỏ qua số chẵn
    if n > 7:
        break          # dừng khi vượt 7
    print(n)           # in 1, 3, 5, 7

Vòng lặp lồng nhau

Bạn có thể đặt vòng lặp trong vòng lặp. Ví dụ in bảng cửu chương:

for a in range(2, 4):
    for b in range(1, 11):
        print(a, "x", b, "=", a * b)

Vòng ngoài chạy 2 lượt, mỗi lượt vòng trong chạy 10 lần, tổng 20 phép tính. Cẩn thận: lồng nhiều tầng làm số lần chạy tăng rất nhanh, đây là nguồn gốc của nhiều chương trình chậm.

Chọn for hay while?

Tình huốngNên dùng
Duyệt từng phần tử của danh sáchfor
Lặp đúng N lầnfor
Lặp đến khi người dùng nhập đúngwhile
Lặp đến khi đạt một điều kiện không biết trướcwhile

Ví dụ thực tế: tính tổng và tìm số nguyên tố

tong = 0
for i in range(1, 101):
    tong += i
print(tong)   # 5050

def la_nguyen_to(n):
    if n < 2:
        return False
    d = 2
    while d * d <= n:
        if n % d == 0:
            return False
        d += 1
    return True

print([x for x in range(2, 30) if la_nguyen_to(x)])

Ví dụ thứ hai chỉ kiểm tra ước đến căn bậc hai của n, một cải tiến nhỏ nhưng giúp nhanh hơn đáng kể.

Lỗi thường gặp

  1. Quên cập nhật biến điều kiện trong while, dẫn tới vòng lặp vô hạn.
  2. Lệch một đơn vị (off-by-one): dùng <= thay vì < làm lặp thừa một lần.
  3. Sửa danh sách trong lúc đang duyệt chính nó.

Bài tập luyện vòng lặp

Thử các bài sau để làm quen, mỗi bài chỉ cần dưới 15 dòng:

  1. In hình tam giác bằng dấu sao với chiều cao n nhập từ bàn phím (vòng lặp lồng nhau).
  2. Tính giai thừa của n bằng vòng for.
  3. Đếm số chữ số của một số nguyên dương bằng while (chia 10 liên tục).
  4. Trò chơi đoán số: máy chọn ngẫu nhiên từ 1 đến 100, người chơi đoán đến khi đúng và chương trình báo "cao hơn" hoặc "thấp hơn".
import random

bi_mat = random.randint(1, 100)
so_lan = 0
while True:
    doan = int(input("Đoán số: "))
    so_lan += 1
    if doan < bi_mat:
        print("Cao hơn")
    elif doan > bi_mat:
        print("Thấp hơn")
    else:
        print(f"Đúng sau {so_lan} lần!")
        break

Mẹo hay: nếu mỗi lần đoán bằng cách chia đôi khoảng còn lại, bạn luôn tìm ra số trong chưa đến 7 lần, chính là tìm kiếm nhị phân.

Kết luận

Vòng lặp biến những việc lặp đi lặp lại thành vài dòng code gọn gàng. Hãy luyện với các bài như tính giai thừa, đếm chữ số, in hình tam giác bằng dấu sao. Khi đã thành thạo, bạn sẽ thấy phần lớn thuật toán đều xoay quanh việc lặp thông minh.

Muốn học bài bản và có người hướng dẫn? Hãy xem các khóa học trên codebem.com để đi từ nền tảng đến dự án thực tế.

author_photo
Nguyễn Đình Cường

0 comment