1. Khái niệm về cấu trúc lặp
Trong lập trình, lặp là việc thực hiện đi thực hiện lại một nhóm câu lệnh. Python hỗ trợ 2 dạng cấu trúc lặp chính:
- Lặp với số lần lặp biết trước: Sử dụng câu lệnh
for. - Lặp với số lần lặp chưa biết trước: Sử dụng câu lệnh
while.
2. Lặp với số lần biết trước (Vòng lặp for)
a. Hàm range()
Hàm range() dùng để tạo ra một dãy số nguyên.
- Cú pháp:
range(start, stop, step)start: Số bắt đầu dãy (mặc định là 0 nếu bỏ trống).stop: Kết thúc dãy (dãy số dừng lại trước giá trị stop, tức là lấy từ start đến stop - 1)step: Bước nhảy giữa các số (mặc định là 1, phải khác 0).
- Các dạng thường gặp:
range(n): Tạo dãy số từ 0 đến n - 1 (gồm n số).range(a, b): Tạo dãy số từ a đến b - 1.range(a, b, c): Tạo dãy số từ a đến gần b với bước nhảy c (có thể dùng bước nhảy âm nếu a > b).
b. Cú pháp câu lệnh for
for <tên biến> in <tập giá trị>:
<khối lệnh>
Biến lặp sẽ lần lượt nhận từng giá trị trong tập giá trị (có thể là dãy số từ range(), danh sách, hoặc xâu ký tự) để thực hiện khối lệnh.
for <tên biến> in <tập giá trị>:
<khối lệnh for>
else:
<khối lệnh else>
Khối lệnh trong else sẽ tự động được thực hiện sau khi vòng lặp for duyệt hết toàn bộ phần tử mà không bị ngắt ngang.
3. Lặp với số lần chưa biết trước (Vòng lặp while)
while <điều kiện>:
<khối lệnh>
- Cách hoạt động: Chừng nào
<điều kiện> còn trả về giá trị đúng (True hoặc khác 0 / khác rỗng), chương trình sẽ tiếp tục thực hiện <khối lệnh>. - Lưu ý quan trọng: Cần đảm bảo giá trị của biến điều kiện được thay đổi bên trong khối lệnh để vòng lặp có thể kết thúc, tránh gây ra vòng lặp vô hạn. Trong trường hợp chương trình bị lặp vô hạn, nhấn tổ hợp phím Ctrl + C để cưỡng chế dừng lại.
4. Các câu lệnh điều khiển vòng lặp (continue & break)
- Câu lệnh continue: Bỏ qua các câu lệnh còn lại bên trong khối lặp của lần lặp hiện tại và nhảy ngay sang lần lặp tiếp theo.
- Câu lệnh break: Bỏ qua các lần lặp còn lại và lập tức thoát hoàn toàn khỏi vòng lặp trong cùng chứa nó.
5. Các dạng bài tập vận dụng kinh điển
- Liệt kê & Đếm (LIETKE.PY, SUMCNT.PY):
- Sử dụng
for i in range(n): để duyệt các số tự nhiên. - Đếm số chẵn hoặc số chia hết cho k bằng biến đếm
d += 1 kết hợp điều kiện chia dư %.
- Tính tổng phân số & tổng dãy (SUM1.PY, SUM2.PY):
- Cộng dồn vào biến tổng
s += 1 / (a + i). - Định dạng số thực 4 chữ số thập phân bằng
print(format(s, ".4f")).
- Tính tổng số ngày trong năm (SUMDAY.PY):
- Dùng vòng lặp
for i in range(1, m + 1): tích lũy số ngày của các tháng trước đó.
- Kiểm tra số nguyên tố (NGTO.PY):
- Số nguyên tố $n$ chỉ có 2 ước là 1 và chính nó.
- Thuật toán tối ưu: Chỉ cần duyệt i từ 2 đến (
int(sqrt(n)) + 1). Nếu tìm thấy n % i == 0 thì kết luận không phải số nguyên tố (break).
- Tìm ước số chung lớn nhất (UCLN.PY):
- Giải thuật Euclid dùng while: Chừng nào a khác b, nếu a > b thì $a = a - b, ngược lại b = b - a. Hoặc dùng chia dư
while b != 0: a, b = b, a % b. - Cách nhanh: Sử dụng
from math import gcd và gọi gcd(a, b).
- Tách chữ số bằng vòng lặp while (SODEP.PY):
- Vòng lặp
while N != 0: lấy chữ số cuối bằng N % 10 và loại bỏ chữ số cuối bằng chia nguyên N = N // 10.
- Tổng dãy đan dấu 1 - 2 + 3 - 4 + ... (EASYSUM.PY):
- Cách 1: Duyệt
for từ 1 đến n, cộng/trừ theo tính chẵn lẻ. - Cách 2 (Tối ưu O(1)): Nếu n chẵn kết quả là
-n // 2; nếu n lẻ kết quả là n // 2 + 1.