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.
- 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
- 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 |
| Đếm | Mỗi lần thỏa điều kiện thì cnt += 1 |
| Tìm kiếm | Duyệ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}")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!")
breakMuốn có cả chỉ số lẫn giá trị khi lặp danh sách, dùng for i, x in enumerate(ds):.
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.
- In các số chia hết cho 3 từ 1 đến 50.
- Tính giai thừa của n.
- Đếm số chữ số của một số nguyên dương.
- In tam giác sao 5 dòng.
forkhi biết số lần hoặc duyệt dãy;whilekhi lặp theo điều kiện.range(a, b, bước)sinh dãy số.breakthoát,continuebỏ qua lượt hiện tại.- Cẩn thận vòng lặp vô hạn.