Cấu trúc lặp for¶
Tóm lược nội dung
Bài này trình bày vòng lặp for
và những khái niệm liên quan như range
, start
, stop
, step
.
Đặt vấn đề¶
Học sinh bị giáo viên bắt chép phạt là một tình huống đã từng xảy ra. Chẳng hạn, chép phạt 100 lần câu "Tôi hứa sẽ luôn cố gắng nâng cấp bản thân".
Làm sao để thực hiện yêu cầu này một cách nhanh nhất, đẹp nhất và thông minh nhất?
Khái niệm¶
Câu lệnh for
là câu lệnh lặp, áp dụng cho trường hợp người lập trình biết trước số lần lặp của thao tác nào đó. Nói cách khác, nếu ta thấy cần phải thực hiện thao tác nào đó 100 lần hoặc 1000 lần sẽ ra được kết quả, thì ta có thể sử dụng vòng lặp for
.
Các loại vòng lặp, trong đó có for
, được sử dụng nhằm tận dụng sức mạnh "trâu bò" của máy tính, thực hiện lặp đi lặp lại những thao tác nào đó cho đến khi ra được kết quả.
Cú pháp¶
Trong đó:
i
gọi là biến chạy hoặc biến điều khiển.i
có giá trị xuất phát từ 0, lần lượt thay đổi thành 1, 2, 3, v.v... cho đến \(số lần lặp - 1\).- Mặc định
i
chạy từ 0, ta vẫn có thể chỉ định một giá trị xuất phát khác. (Xem những phần tiếp theo trong bài này). số_lần_lặp
là số lần thực hiệnkhối_lệnh
(gồm một hoặc nhiều lệnh). Cụ thể:- i = 0: Thực hiện
khối_lệnh
lần đầu tiên. - i = 1: Thực hiện
khối_lệnh
lần thứ 2. - i = 2: Thực hiện
khối_lệnh
lần tiếp theo. - ...
- i = số_lần_lặp - 1: Thực hiện
khối_lệnh
lần cuối cùng. - i = số_lần_lặp: Không thực hiện nữa. Vòng lặp kết thúc.
- i = 0: Thực hiện
Ví dụ 1:
Đoạn mã sau giúp chép phạt 100 lần.
Câu hỏi 1
Dòng lệnh print
trong đoạn mã trên sẽ được thực hiện bao nhiêu lần?
Đáp án
Tương tự ví dụ 1, range(10000)
đồng nghĩa print
được thực hiện 10000 lần.
Tuy nhiên, tác giả chỉ code minh họa, chứ ảnh không nghĩ là bạn sẽ bấm run đoạn mã này đâu.
Lệnh range¶
range(stop)¶
Trường hợp range
chỉ có một tham số duy nhất:
Khi lệnh này được thực hiện, biến i
chạy từ 0
đến stop - 1
.
Diễn giải theo toán học là: \(i \in [0, stop)\). Nói cách khác, lấy mốc đầu (là 0
), nhưng không lấy mốc cuối (là stop
).
Ví dụ 2:
In ra các số từ 0 đến 9.
Output:
Ví dụ 3:
In ra các số từ 0 đến 10.
Output:
Trong ví dụ 3, để lấy được số 10, ta phải viết là range(n + 1)
.
Câu hỏi 2
Sau khi thực hiện đoạn mã dưới đây, kết quả in trên màn hình là gì?
Đáp án
0
1
2
3
Ví dụ 4:
Tính tổng \(S = 1 + 2 + 3 + ... + n\).
Output:
Trong ví dụ 4, S = S + i
được gọi là thao tác cộng dồn, cộng dồn i
vào S
.
range(start, stop)¶
Trường hợp range
có hai tham số:
Trường hợp này áp dụng khi ta không muốn i
chạy từ 0
, mà từ một số khác, cụ thể là từ start
.
Diễn giải theo toán học là: \([start, stop)\). Nói cách khác, lấy mốc bắt đầu là start
và mốc kết thúc là stop - 1
, tức ngay trước stop
.
Câu hỏi 3
Vẫn là tính tổng \(S = 1 + 2 + 3 + ... + n\).
Bạn hãy viết lại dòng lệnh for
và điều chỉnh hàm range
của ví dụ 4 sao cho chương trình không thực hiện thao tác thừa là cộng dồn với 0
.
Đáp án
Trong ví dụ 4, range(n + 1)
nghĩa là i
chạy từ 0
, và 0
sẽ được cộng dồn vào S
. Đây là thao tác thừa.
Để bỏ qua thao tác này, ta sửa lại thành range(1, n + 1)
, cụ thể như sau:
Output:
Ví dụ 5:
Tính tổng các số từ m đến n, với m, n đều là số nguyên dương.
Chẳng hạn, với m = 5, n = 8, thì tổng bằng 5 + 6 + 7 + 8 = 26.
Output:
Câu hỏi 4
Biết rằng m và n vẫn được nhập giá trị lần lượt là 5 và 8.
Nếu dòng lệnh for của ví dụ 6 được sửa lại thành for i in range(m, n):
thì kết quả in ra màn hình là gì?
Đáp án
Lúc này, biến i
chạy từ 5 đến 7. Biến S
sẽ lần lượt được cộng dồn với 5, 6 và 7.
Do đó, S
có giá trị là 18.
range(start, stop, step)¶
Trường hợp range
có đầy đủ ba tham số:
Trường hợp này áp dụng khi ta không muốn biến i
tăng 1 sau mỗi lần lặp, mà tăng theo step
nào đó.
Chẳng hạn, nếu muốn i
tăng 2, ta thiết lập tham số step
là 2.
Một cách tổng quát, nếu muốn i
nhảy \(x\) bước, ta thiết lập step
là \(x\).
Ví dụ 6:
Tính tổng các số chẵn từ 0 đến n.
Output:
Câu hỏi 5
Bạn hãy điều chỉnh dòng lệnh for của ví dụ 6 để đoạn mã trở thành tính tổng các số lẻ.
Đáp án
Tham số step có giá trị âm¶
Nếu đặt step
là số âm thì biến i
sẽ chạy từ số lớn ngược về số nhỏ.
Ví dụ 7:
In các số từ 10 giảm dần về 2.
Output:
Sơ đồ tóm tắt nội dung¶
Google Colab¶
Các đoạn mã trong bài này được đặt tại Google Colab để bạn có thể thử nghiệm theo cách của riêng mình.
Some English words¶
Vietnamese | Tiếng Anh |
---|---|
lặp đi lặp lại | repeatedly |
số lần lặp | number of iterations |
vòng lặp | loop |