Bài 5 · Vận dụng · 20 phút· Cập nhật 11/06/2026
Điều khiển luồng trong Python
Biên soạn bởi Nguyễn Anh Tuấn
Điều khiển luồng trong Python: rẽ nhánh if/elif/else, vòng lặp for/while, break/continue, truthiness, enumerate/zip và list comprehension.
if chạy một khối khi điều kiện đúng; elif (else-if) thử điều kiện tiếp theo; else lo phần còn lại. Khối được gom bằng thụt lề (4 dấu cách), không dùng {}:
chan_le.py
for i in range(4):
if i % 2 == 0:
print(i, "chan")
else:
print(i, "le") Kết quả khi chạy
0 chan 1 le 2 chan 3 le
- ▸Cú pháp: if điều_kiện: rồi khối thụt vào; elif / else là tuỳ chọn.
- ▸Khối gom bằng thụt lề CÙNG mức (quy ước 4 dấu cách) - đây là cú pháp.
- ▸So sánh: ==, !=, <, >, <=, >=; nối điều kiện bằng and, or, not.
Điều kiện không nhất thiết là True/False. Python coi nhiều object là “giả” (falsy) hay “thật” (truthy). Quy tắc gọn: rỗng / 0 / None là falsy, còn lại truthy:
| Giá trị | bool(x) | |
|---|---|---|
| 0 | False | số 0 |
| "" (rỗng) | False | str rỗng |
| [ ] · {} | False | list/dict rỗng |
| None | False | không có gì |
| 5 · "hi" · [1] | True | khác 0 / không rỗng |
truthy.py
gio_hang = []
if not gio_hang: # list rong -> falsy
print("Gio hang trong") Kết quả khi chạy
Gio hang trong
Idiom hay dùng
for của Python duyệt phần tử (không đếm chỉ số như C); range(n) sinh 0…n−1. while lặp khi điều kiện còn đúng. Bấm Tiếp → để chạy từng bước:
break & continue
for i in range(5):
if i == 3:
break # THOAT han vong lap
print(i)
# -> 0 1 2
for i in range(5):
if i % 2 == 0:
continue # BO QUA, sang lan ke
print(i)
# -> 1 3 Kết quả khi chạy
0 1 2 1 3
- ▸for item in collection: duyệt list, str, range, dict…
- ▸range(n) = 0…n−1; range(a, b, step) linh hoạt; cần chỉ số → enumerate().
- ▸break thoát hẳn vòng lặp; continue bỏ qua phần còn lại, sang lần kế.
Hai hàm rất hữu ích khi duyệt: enumerate cho cả chỉ số lẫn phần tử; zip ghép song song nhiều dãy:
enum_zip.py
ten = ["An", "Binh", "Cuc"]
diem = [9, 8, 10]
for i, t in enumerate(ten, 1): # i: chi so (bat dau tu 1), t: phan tu
print(i, t)
for t, d in zip(ten, diem): # ghep hai day theo cap
print(t, "->", d) Kết quả khi chạy
1 An 2 Binh 3 Cuc An -> 9 Binh -> 8 Cuc -> 10
- ▸enumerate(dãy, start) → (chỉ_số, phần_tử) - KHỎI tự quản biến đếm như C.
- ▸zip(a, b) → các cặp (a[i], b[i]); dừng ở dãy ngắn nhất.
- ▸Đây là cách “Pythonic” thay cho for i in range(len(...)) rồi truy cập theo chỉ số.
Mẫu “tạo rỗng → for → append” có cách viết gọn: comprehension - cho cả list, dict và set:
comprehension.py
ten = ["An", "Binh", "Cuc"]; diem = [9, 8, 10]
binh_phuong = [i * i for i in range(4)] # LIST: [0, 1, 4, 9]
chan = [x for x in range(10) if x % 2 == 0] # LIST co dieu kien
bang_diem = {t: d for t, d in zip(ten, diem)} # DICT comprehension
diem_la = {d for d in diem} # SET (loai trung)
print(binh_phuong)
print(bang_diem) Kết quả khi chạy
[0, 1, 4, 9]
{'An': 9, 'Binh': 8, 'Cuc': 10}- ▸[ biểu_thức for x in dãy ] tạo list; { } cho set; { k: v for ... } cho dict.
- ▸Kèm điều kiện: [x for x in nums if x > 0] - lọc luôn khi tạo.
- ▸Gọn & thường nhanh hơn; nhưng đừng nhồi phức tạp khiến khó đọc.
Một nét lạ & hữu ích: vòng for/while có thể kèm else - khối else chạy khi vòng lặp kết thúc mà KHÔNG gặp break:
for_else.py - tìm số chẵn
for n in [7, 9, 11]:
if n % 2 == 0:
print("co so chan:", n)
break
else:
print("khong co so chan nao") # chay vi vong lap KHONG break Kết quả khi chạy
khong co so chan nao
- ▸else của vòng lặp chạy khi DUYỆT HẾT mà không break - hợp cho mẫu “tìm kiếm”.
- ▸Nếu tìm thấy (break) → else KHÔNG chạy.
- ▸Rẽ nhánh nhiều trường hợp phức tạp? Python 3.10+ có match/case (structural pattern matching).
Câu hỏi thường gặp
Đó là lựa chọn thiết kế: thụt lề là CÚ PHÁP bắt buộc. Khối trong if/for/while/def là các dòng thụt vào CÙNG mức. Quy ước phổ biến là 4 dấu cách. Lợi: code luôn “gọn mắt”; hại: trộn tab và space sẽ gây lỗi - hãy chọn 1 loại (space).
Là việc một object được coi là Đúng (truthy) hay Sai (falsy) khi đặt trong if. Các giá trị FALSY: 0, 0.0, "" (str rỗng), [] {} () (rỗng), None, False. Mọi thứ khác là truthy. Nhờ vậy if danh_sach: nghĩa là “nếu list KHÔNG rỗng”.
C đếm chỉ số (for i = 0; i < n; i++). Python DUYỆT phần tử: for item in collection - chạy qua từng phần tử của bất cứ thứ gì “lặp được” (list, str, range, dict…). Cần con số? Dùng range(n) hoặc enumerate() để có cả chỉ số lẫn phần tử.
0, 1, 2, 3 - bắt đầu từ 0, KHÔNG gồm 4. range(start, stop[, step]) linh hoạt: range(2, 5) là 2,3,4; range(0, 10, 2) là 0,2,4,6,8. range không tạo sẵn cả dãy mà sinh từng số khi cần (tiết kiệm bộ nhớ).
Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.
Trả lời vài câu để chắc rằng em đã nắm bài.
Trong Python, giá trị nào sau đây là “falsy” (bị coi là sai trong if)?
- 1
Phân loại điểm
Viết
if/elif/else: điểm ≥ 8 in "Gioi", ≥ 6.5 in "Kha", ≥ 5 in "Trung binh", còn lại "Yeu".Hoàn thành khi: Bốn nhánh đúng thứ tự; thử vài giá trị (9, 7, 5, 3) ra đúng nhãn.
- 2
Truthiness
Không dùng
len(): viết câu kiểm “nếu list rỗng thì in (trong)”.Hoàn thành khi:
if not danh_sach: print("(trong)")- dựa vào list rỗng là falsy. - 3
Tổng 1..100
Dùng vòng
for+rangeđể tính tổng các số từ 1 tới 100.Hoàn thành khi:
for i in range(1, 101): tong += i→ 5050. - 4
Tìm rồi dừng
Duyệt
[4, 7, 2, 9, 5], in số ĐẦU TIÊN lớn hơn 6 rồi dừng vòng lặp.Hoàn thành khi: Dùng
for+if+break: in 7 rồi thoát. - 5
Lọc số lẻ
Dùng
continueđể in chỉ các số LẺ trongrange(10).Hoàn thành khi:
for i in range(10): if i % 2 == 0: continue; print(i)→ 1 3 5 7 9. - 6
Comprehension
Viết comprehension tạo list bình phương của các số CHẴN trong
range(10).Hoàn thành khi:
[i*i for i in range(10) if i % 2 == 0]→[0, 4, 16, 36, 64].