Bài 4. Vòng lặp

Vòng lặp giúp máy tính làm việc lặp đi lặp lại thay bạn. Bài này dạy for, while, range, break, continue.

35 phútCơ bản
Bạn sẽ học được
  • Dùng for với range và với danh sách
  • Dùng while khi chưa biết số lần lặp
  • Điều khiển vòng lặp bằng break, continue
  • Tính tổng, đếm, tìm kiếm bằng vòng lặp
Thuật ngữ cần biết
Vòng lặp
Khối lệnh chạy lại nhiều lần.
Biến đếm
Biến thay đổi qua mỗi vòng, ví dụ i.
Lặp vô hạn
Vòng lặp không bao giờ dừng vì điều kiện luôn đúng; thường là lỗi.
Bộ tích lũy
Biến cộng dồn kết quả, ví dụ tong.

Khái niệm và lý thuyết

Khi một việc phải làm nhiều lần, ta không chép lệnh nhiều lần mà dùng vòng lặp. Hai loại chính: for khi biết trước số lần lặp hoặc cần duyệt qua từng phần tử của một dãy; while khi chưa biết số lần, chỉ biết điều kiện để tiếp tục.

Mỗi lần thực hiện thân vòng lặp gọi là một lần lặp (iteration). Với for i in range(5), biến i lần lượt nhận 0, 1, 2, 3, 4. Chú ý Python đếm từ 0 và giá trị cuối không bao gồm. Với while, điều kiện được kiểm tra trước mỗi lần lặp; nếu ngay từ đầu đã sai thì thân vòng không chạy lần nào.

Mẫu thuật toánÝ tưởng
Tích lũy (tổng, tích)Khởi tạo biến, mỗi vòng cập nhật: tong += x
ĐếmMỗi lần thỏa điều kiện thì cnt += 1
Tìm kiếmDuyệt dãy, gặp phần tử cần tìm thì dừng bằng break
Lặp đến khi hợp lệwhile True kết hợp break khi dữ liệu đúng

Một vòng lặp đúng cần ba yếu tố: khởi tạo (giá trị ban đầu), điều kiện (khi nào còn lặp) và cập nhật (thay đổi để tiến tới kết thúc). Thiếu cập nhật sẽ gây lặp vô hạn.

Vòng lặp for và range

for i in range(5):        # 0,1,2,3,4
    print("Lần", i)

for i in range(1, 11, 2):  # 1,3,5,7,9
    print(i)

for ten in ["An", "Bình", "Chi"]:
    print("Chào", ten)

range(a, b, bước) tạo dãy từ a đến b-1.

Vòng lặp while

so = 0
while so <= 0:
    so = int(input("Nhập số dương: "))
print("Bạn đã nhập", so)

while lặp khi điều kiện còn đúng. Dùng khi chưa biết trước số lần, ví dụ hỏi lại đến khi người dùng nhập hợp lệ.

break và continue

for n in range(1, 100):
    if n % 7 == 0:
        print("Số chia hết cho 7 đầu tiên:", n)
        break          # thoát hẳn vòng lặp

for n in range(1, 11):
    if n % 2 == 0:
        continue       # bỏ qua lượt này
    print(n)

Ví dụ: bảng cửu chương, cộng dồn và đoán số

# Bảng cửu chương 7
for i in range(1, 11):
    print("7 x", i, "=", 7 * i)

# Tổng các số từ 1 đến 100
tong = 0
for i in range(1, 101):
    tong += i
print(tong)

Với while, ví dụ kinh điển là trò đoán số: chương trình chọn một số bí mật, người chơi nhập đến khi đúng thì dừng. Bạn không biết trước bao nhiêu lần lặp nên dùng while phù hợp hơn for. Quy tắc nhớ nhanh: biết số lần lặp thì dùng for, lặp đến khi có điều kiện thì dùng while.

Mẫu thường gặp

# Tính tổng 1..100
tong = 0
for i in range(1, 101):
    tong += i
print(tong)  # 5050

# Bảng cửu chương
for i in range(1, 11):
    print(f"7 x {i} = {7*i}")
Tình huống: Đoán số

Máy nghĩ một số từ 1 đến 100, bạn đoán đến khi đúng; máy gợi ý "cao hơn" hoặc "thấp hơn".

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

Muốn có cả chỉ số lẫn giá trị khi lặp danh sách, dùng for i, x in enumerate(ds):.

Lưu ý

Quên cập nhật biến điều kiện trong while sẽ gây lặp vô hạn. Dừng chương trình bằng Ctrl+C.

Thực hành
  1. In các số chia hết cho 3 từ 1 đến 50.
  2. Tính giai thừa của n.
  3. Đếm số chữ số của một số nguyên dương.
  4. In tam giác sao 5 dòng.
Tóm tắt bài học
  • for khi biết số lần hoặc duyệt dãy; while khi lặp theo điều kiện.
  • range(a, b, bước) sinh dãy số.
  • break thoát, continue bỏ qua lượt hiện tại.
  • Cẩn thận vòng lặp vô hạn.