Bài 5: Vòng lặp for và while trong Python

Bài 4 bạn đã cho chương trình biết rẽ nhánh. Giờ ta dạy nó lặp lại công việc — thay vì viết một dòng print mười lần, ta bảo máy làm mười lần. Đó là vòng lặp, thứ khiến máy tính thật sự tiết kiệm sức người. Cuối bài bạn tự viết một chương trình tính tổng và trung bình điểm từ danh sách người dùng nhập, chạy ra kết quả thật.
⏱️ Cách học bài này (~30 phút): đọc for/while + code mẫu (10’), tự gõ và chạy các bài thực hành (12’), xem lỗi thường gặp (4’), tự kiểm + lưu code mang về (4’).
Mục tiêu bài học
Sau bài này bạn sẽ:
- Viết vòng lặp
forduyệt danh sách và dùngrange(). - Viết vòng lặp
whilelặp tới khi một điều kiện thay đổi. - Dùng
break(thoát vòng lặp) vàcontinue(bỏ qua lượt này). - Tự viết chương trình tính tổng & trung bình điểm — thêm vào kho code cá nhân.
Nội dung: hai kiểu vòng lặp
1. Vòng for — lặp qua một dãy
for duyệt lần lượt từng phần tử. Đơn giản nhất là dùng với range():
for i in range(5):
print(i) # in 0, 1, 2, 3, 4 (KHÔNG có 5)
range(5) tạo dãy 0 → 4 (5 số, không tính số cuối). for cũng duyệt trực tiếp một danh sách:
diem_list = [8, 6.5, 9, 7]
for diem in diem_list:
print(diem) # in lần lượt từng điểm
2. Vòng while — lặp tới khi điều kiện sai
while lặp chừng nào điều kiện còn đúng:
i = 1
while i <= 3:
print(i) # in 1, 2, 3
i = i + 1 # BẮT BUỘC cập nhật, không thì lặp vô hạn
⚠️ Lặp vô hạn: nếu quên
i = i + 1, điều kiệni <= 3luôn đúng → chương trình treo. Luôn để một thứ thay đổi để vòng dừng được. Lỡ treo thì nhấn Ctrl + C để ngắt.
3. break và continue
for so in range(10):
if so == 5:
break # gặp 5 thì THOÁT hẳn vòng lặp
if so % 2 == 1:
continue # số lẻ thì BỎ QUA, sang lượt kế
print(so) # chỉ in 0, 2, 4
break— thoát vòng lặp ngay.continue— bỏ phần còn lại của lượt này, sang lượt kế.
Code mẫu có chú thích: tính tổng & trung bình điểm
Cho người dùng nhập điểm liên tục tới khi gõ q, rồi tính kết quả:
diem_list = [] # danh sách rỗng để chứa điểm
while True: # lặp mãi tới khi break
nhap = input("Nhập điểm (gõ q để xong): ")
if nhap == "q":
break # thoát vòng lặp
diem_list.append(float(nhap)) # thêm điểm vào danh sách
if len(diem_list) == 0: # tránh chia cho 0
print("Chưa nhập điểm nào.")
else:
tong = 0
for diem in diem_list: # cộng dồn từng điểm
tong = tong + diem
trung_binh = tong / len(diem_list)
print(f"Tổng: {tong} | Trung bình: {trung_binh:.2f}")
Chạy thử nhập 8, 6, 10, rồi q → Tổng: 24.0 | Trung bình: 8.00. Mấu chốt: while True + break để lặp không biết trước số lần, for để cộng dồn, và {trung_binh:.2f} làm tròn 2 chữ số thập phân.
Bài thực hành code (tự gõ)
Bài 1 — Đếm từ 1 tới 10: in các số 1 đến 10, mỗi số một dòng.
✅ Gợi ý: for i in range(1, 11) (nhớ số cuối 11 không được in).
Bài 2 — Bảng cửu chương: nhận một số n, in bảng cửu chương của n (n×1 tới n×10).
✅ Gợi ý: n = int(input("Nhập số: ")) rồi for i in range(1, 11): print(f"{n} x {i} = {n*i}").
Bài 3 — Tìm số lớn nhất: cho so_list = [4, 9, 2, 15, 7], dùng vòng lặp tìm số lớn nhất (không dùng hàm max).
✅ Gợi ý: giữ một biến lon_nhat, duyệt từng số, nếu số hiện tại lớn hơn thì cập nhật.
Lỗi thường gặp & cách sửa
- Lặp vô hạn (treo máy) → vòng
whilequên cập nhật biến điều kiện. Đảm bảo có gì đó thay đổi; Ctrl + C để ngắt. rangethiếu/thừa 1 số →range(1, 11)mới in tới 10; số cuối không được tính. Đây là lỗi “lệch 1” kinh điển.IndentationError→ khối bên trongfor/whilephải thụt lề 4 dấu cách (xem lại Bài 4).- Chia cho 0 → tính trung bình khi danh sách rỗng. Kiểm tra
len(...) == 0trước. - Quên
float()khi nhập → cộng chuỗi thay vì số.input()trả về chuỗi, nhớ ép kiểu.
💾 Mang về — chương trình tính điểm
Lưu vào kho code cá nhân (bài L5 trong series):
# tinh_diem.py — nhập điểm tới khi gõ q, tính tổng và trung bình
diem_list = []
while True:
nhap = input("Nhập điểm (gõ q để xong): ")
if nhap == "q":
break
diem_list.append(float(nhap))
if diem_list:
tong = sum(diem_list)
print(f"Tổng: {tong} | Trung bình: {tong/len(diem_list):.2f}")
else:
print("Chưa nhập điểm nào.")
(Bản này gọn hơn ở hai chỗ, cả hai đều tương đương bản trên: sum() là hàm có sẵn cộng cả danh sách thay cho vòng for cộng dồn; còn if diem_list: nghĩa là “nếu danh sách không rỗng” — Python coi danh sách rỗng là False, nên nó tương đương if len(diem_list) > 0:.)
Thuật ngữ chốt
| Thuật ngữ | Giải thích ngắn |
|---|---|
| for | Lặp qua từng phần tử của một dãy/danh sách |
| while | Lặp chừng nào điều kiện còn đúng |
| range(n) | Tạo dãy 0 → n-1 (không gồm n) |
| break | Thoát vòng lặp ngay lập tức |
| continue | Bỏ qua lượt hiện tại, sang lượt kế |
| .append() | Thêm một phần tử vào cuối danh sách |
Tự kiểm tra & lời giải
range(3)tạo những số nào? (Đáp án: 0, 1, 2)breakvàcontinuekhác nhau ra sao? (Đáp án: break thoát hẳn vòng lặp; continue chỉ bỏ lượt hiện tại rồi lặp tiếp)- Vì sao vòng
whilecó thể treo máy? (Đáp án: điều kiện không bao giờ sai vì quên cập nhật biến)
Lời giải Bài thực hành:
# Bài 1
for i in range(1, 11):
print(i)
# Bài 2
n = int(input("Nhập số: "))
for i in range(1, 11):
print(f"{n} x {i} = {n*i}")
# Bài 3
so_list = [4, 9, 2, 15, 7]
lon_nhat = so_list[0]
for so in so_list:
if so > lon_nhat:
lon_nhat = so
print(lon_nhat) # 15
Ghi nhớ nhanh
forkhi biết số lần / duyệt danh sách;whilekhi lặp tới lúc điều kiện đổi.range(a, b)chạy từ a tới b-1 — nhớ số cuối không tính.breakthoát,continuebỏ lượt; vòngwhilephải có thứ thay đổi để không treo.
👉 Bài tập về nhà: nâng cấp chương trình tính điểm để in thêm điểm cao nhất và thấp nhất (gợi ý: dùng vòng lặp so sánh, hoặc hàm max()/min()). Bài tiếp theo trong series: Bài 6 — List, tuple, set (sắp đăng).
Câu hỏi thường gặp
Dùng for hay while khi nào?
Dùng for khi biết trước sẽ lặp bao nhiêu lần hoặc duyệt qua một danh sách/dãy có sẵn (vd duyệt từng điểm trong danh sách). Dùng while khi lặp cho tới khi một điều kiện thay đổi mà chưa biết trước số lần (vd hỏi người dùng nhập cho tới khi họ gõ ‘xong’). Nắm được sự khác biệt này là chọn đúng vòng lặp.
range(5) tạo ra những số nào?
range(5) tạo dãy 0, 1, 2, 3, 4 — bắt đầu từ 0 và KHÔNG bao gồm 5, tổng cộng 5 số. range(1, 5) cho 1, 2, 3, 4. range(0, 10, 2) cho 0, 2, 4, 6, 8 (bước nhảy 2). Người mới hay quên rằng số cuối không được tính vào.
Vì sao chương trình bị treo (lặp vô hạn)?
Thường do vòng while có điều kiện không bao giờ sai vì bạn quên cập nhật biến điều kiện bên trong vòng lặp. Ví dụ while i < 5 mà quên i = i + 1 thì i mãi bằng giá trị đầu và lặp vô tận. Luôn đảm bảo có gì đó thay đổi để vòng while dừng được. Nhấn Ctrl + C để ngắt.
Thợ code chính hiệu, thích dắt người mới qua mấy đoạn 'khó nhằn' bằng giọng nhẹ tênh. Châm ngôn: cứ làm dự án thật, sai thì sửa, vui là chính.
Bài liên quan

Bài 2: Cài công cụ làm web — VS Code và trình duyệt
Bài 2 series Web cơ bản (bài học 30 phút): cài VS Code, sắp xếp thư mục dự án, viết và mở file HTML đầu tiên trong trình duyệt — kèm vài tiện ích nên có và lỗi thường gặp.

Bài 4: Điều kiện if/else trong Python
Bài 4 series Python cho người mới (bài học 30 phút): dạy chương trình ra quyết định với if/elif/else và toán tử so sánh, qua một chương trình xếp loại điểm tự viết — kèm bài tập, lỗi thường gặp và code mang về.

Cách dùng AI để học lập trình hiệu quả hơn (mà không lệ thuộc)
AI có thể là gia sư lập trình tuyệt vời — hoặc cái nạng khiến bạn mãi không giỏi. Đây là cách dùng AI để học code nhanh hơn: prompt học đúng cách, và ranh giới để không lệ thuộc.