Ba cách điều khiển thứ tự lệnh
**Tuần tự** là các lệnh chạy lần lượt như gán giá trị rồi in. **Rẽ nhánh** chọn khối theo điều kiện `if`. **Lặp** thực hiện khối nhiều lượt bằng `for` hoặc `while`. Một chương trình có thể kết hợp cả ba: nhập n, lặp để xét k, rồi dùng if kiểm k có là ước của n không. Đọc lề và điều kiện giúp biết lệnh nào chạy một lần, lệnh nào lặp hoặc chỉ chạy khi đúng.
Bài luyện
Trong chương trình tìm ước, `for k in range(1, n + 1)` thuộc cấu trúc nào?
Các lệnh trong vòng có thể chạy nhiều lượt.
Điều kiện if mới là rẽ nhánh.
for duyệt nhiều giá trị của k.
Lệnh for không nhập từ bàn phím.
Lời giải
`for` lần lượt gán các giá trị cho k và thực hiện khối bên trong, nên đó là cấu trúc lặp.
Dừng sớm bằng break
`break` thoát ngay khỏi vòng `for` hoặc `while` gần nhất đang chứa nó. Mã sau in từ 0 đến 3; khi k bằng 3, lệnh `print(k)` chạy **trước** `break`, nên số 3 vẫn được in:
```python
for k in range(6):
print(k, end=" ")
if k == 3:
break
```
Kết quả là `0 1 2 3`. Nếu đưa `break` lên trước `print(k)` trong nhánh k = 3, kết quả sẽ dừng ở 2. Dừng sớm khác với việc điều kiện của range hết giá trị.
Bài luyện
Mã dùng break trong bài in dãy nào?
3 được in trước khi break.
In 0 đến 3; tại k = 3 thì thoát.
Không tới 4 và 5 vì break.
Vòng bắt đầu từ 0.
Lời giải
`range(6)` bắt đầu 0. Mỗi lượt in k; tại k = 3, mã đã in 3 rồi `break` dừng vòng nên không in 4, 5.
Bài luyện
Trong mã đó, nếu đưa `break` lên trước `print(k)` khi k = 3, số cuối cùng được in là gì?
Khi k = 3, break chạy trước nên 3 không được in; 2 là số cuối.
3 chưa được in ở lượt dừng.
4 không được xét sau break.
5 cũng không được xét.
Lời giải
Ở các lượt k = 0, 1, 2, lệnh in chạy. Đến k = 3, `break` dừng vòng trước lệnh in, nên số cuối cùng đã in là 2.
Đang học