Mục tiêu bài học
- Hiểu rõ ý nghĩa và cách hoạt động của vùng giá trị được tạo bởi lệnh range().
- Nắm vững chức năng và cú pháp của lệnh lặp for trong ngôn ngữ lập trình Python.
- Áp dụng vòng lặp for để giải quyết các bài toán lặp với số lần biết trước.
Hoạt động khởi động
Trong cuộc sống và lập trình, chúng ta thường xuyên gặp các công việc cần thực hiện lặp đi lặp lại. Ví dụ:
- Để kể tên tất cả 30 bạn học sinh trong lớp, bạn cần lần lượt đọc tên từng bạn.
- Để đếm các số chia hết cho 3 trong khoảng từ 1 đến 50, bạn phải kiểm tra lần lượt từng số (1, 2, 3,…) và ghi nhận lại.
Những thao tác lặp lại này có thể được mô tả ngắn gọn trong lập trình bằng một cấu trúc lặp.
Em có thể xác định được trong mỗi ví dụ trên công việc nào cần phải lặp và được lặp lại bao nhiêu lần không?
+ Ví dụ 1 (Kể tên học sinh): Công việc cần lặp là “đọc tên một bạn”. Nếu lớp có 30 học sinh, công việc này sẽ được lặp lại 30 lần.
+ Ví dụ 2 (Đếm số chia hết cho 3): Công việc cần lặp là “kiểm tra một số xem có chia hết cho 3 hay không”. Vì ta xét các số từ 1 đến 50, công việc này sẽ được lặp lại 50 lần.
1. Lệnh lặp FOR
Lệnh lặp for được sử dụng khi chúng ta muốn thực hiện một khối lệnh với số lần lặp đã biết trước. Lệnh này thường đi kèm với hàm range() để xác định vùng giá trị lặp.
Ví dụ: Tính tổng các số từ 0 đến 9.
S = 0
for k in range(10):
S = S + k
print(S)
# Kết quả: 45
Trong đoạn code trên, tổng có giá trị bao nhiêu? Giải thích kết quả.
Tổng có giá trị là 45.
+ Lệnh range(10)
tạo ra một dãy số từ 0 đến 9 (gồm 10 số).
+ Vòng lặp for sẽ lặp 10 lần. Ở mỗi lần lặp, biến k sẽ lần lượt nhận các giá trị: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
+ Biến S được cộng dồn với giá trị của k trong mỗi lần lặp.
+ Kết quả cuối cùng của S là tổng 0 + 1 + 2 + … + 9 = 45.
Cú pháp của lệnh lặp for với số lần biết trước trong Python như sau:
for <biến đếm> in range(n):
<khối lệnh>
<biến đếm>
: Là một biến dùng để duyệt qua các giá trị trong vùng lặp (ví dụ: k, i).range(n)
: Tạo ra một dãy số nguyên từ 0 đến n-1.<khối lệnh>
: Các câu lệnh sẽ được thực thi trong mỗi vòng lặp. Các lệnh này phải được viết thụt vào so với dòng for.

Với giá trị n cho trước, so sánh giá trị S trong đoạn chương trình sau với tổng 1 + 2 + ... + n. S = 0; for k in range(1,n+1): S = S + k
Giá trị của S trong đoạn chương trình chính là tổng 1 + 2 + … + n.
Lệnh range(1, n + 1) sẽ tạo ra một dãy các giá trị bao gồm 1, 2, 3, …, n.
Vòng lặp for sẽ duyệt qua từng giá trị này, gán cho biến k và cộng dồn vào biến S.
Do vậy, đoạn chương trình trên thực sự tính tổng các số từ 1 đến n.
Với giá trị n cho trước, so sánh giá trị S trong đoạn chương trình sau với tổng 1 + 2 + … + n
S = 0
for k in range(1,n+1):
S = S + k
Giá trị của S
trong đoạn chương trình trên chính là tổng 1 + 2 + ... + n
.
- Lệnh
range(1, n + 1)
sẽ tạo ra một dãy các giá trị bao gồm1, 2, 3, ..., n
. - Vòng lặp
for
sẽ duyệt qua từng giá trị này, gán cho biếnk
và cộng dồn vào biếnS
. - Do vậy, đoạn chương trình trên thực sự tính tổng các số từ
1
đếnn
.
2. Lệnh RANGE
Lệnh range() dùng để tạo ra một vùng giá trị (dãy số nguyên) tuần tự.
Các dạng thường dùng:
Cú pháp | Ý nghĩa | Ví dụ | Dãy số tạo ra |
---|---|---|---|
range(stop) | Tạo dãy số từ 0 đến stop - 1 . | range(5) | 0, 1, 2, 3, 4 |
range(start, stop) | Tạo dãy số từ start đến stop - 1 . | range(3, 8) | 3, 4, 5, 6, 7 |
Lưu ý: Nếu giá trị start lớn hơn hoặc bằng stop (ví dụ: range(100, 1)), range() sẽ tạo ra một dãy rỗng.
Hãy biểu diễn các dãy sau đây bằng lệnh range()
a) 1, 2, 3,…, 50.
b) 5, 6, 7, 8, 9, 10.
c) 0, 1.
d) 10.
Dãy số | Lệnh range() tương ứng |
---|---|
a) 1, 2, 3, …, 50 | range(1, 51) |
b) 5, 6, 7, 8, 9, 10 | range(5, 11) |
c) 0, 1 | range(2) |
d) 10 | range(10, 11) |
Thực hành
Nhiệm vụ 1:
In các ước số của một số tự nhiên n
Viết chương trình nhập vào số n và in ra màn hình các ước số của n trên cùng một hàng.
Hướng dẫn: Ước của n là số tự nhiên k mà n % k == 0
. Ta dùng vòng lặp for để duyệt các số k từ 1 đến n và kiểm tra điều kiện này.
n = int(input("Nhập số tự nhiên n: "))
for k in range(1, n + 1):
if n % k == 0:
print(k, end=" ")
Nhiệm vụ 2:
Đếm số ước thực sự của n
Ước số thực sự của n là các ước số nhỏ hơn n. Viết chương trình nhập n và đếm số lượng ước thực sự của nó.
Hướng dẫn: Tương tự nhiệm vụ 1, nhưng ta chỉ duyệt k từ 1 đến n-1 (dùng range(1, n)
) và dùng một biến đếm (count) để lưu kết quả.
n = int(input("Nhập số tự nhiên n: "))
count = 0
for k in range(1, n):
if n % k == 0:
count = count + 1
print(count)
Luyện tập
1. Đoạn chương trình sau in ra kết quả gì?
n = int(input("Nhập số tự nhiên n:"))
S = 0
for k in range(n+1):
S = S + k
print(S*S)
Đoạn chương trình này in ra bình phương của tổng các số tự nhiên từ 0 đến n, tức là (0 + 1 + 2 + … + n)².
- Vòng lặp for tính tổng
S = 0 + 1 + 2 + ... + n
. - Lệnh
print(S*S)
in ra giá trị S nhân với chính nó.
2. Viết đoạn chương trình tính tích 1 × 2 × 3 ×…× n với n được nhập vào từ bàn phím.
n = int(input("Nhập số tự nhiên n: "))
P = 1 # Khởi tạo tích bằng 1
for k in range(1, n + 1):
P = P * k
print("Giai thừa của", n, "là:", P)
Vận dụng
1. Viết chương trình nhập từ bàn phím số tự nhiên n và in ra kết quả S = 1 + 1/2 + … + 1/n.
n = int(input("Nhập số tự nhiên n: "))
S = 0.0 # Khởi tạo tổng là số thực để chứa kết quả thập phân
for i in range(1, n + 1):
S = S + 1/i
print("Tổng S là:", S)
2. Viết chương trình nhập từ bàn phím số tự nhiên n và in ra kết quả là tổng sau: S = 1³ + 2³ + … + n³.
n = int(input("Nhập số tự nhiên n: "))
S = 0
for i in range(1, n + 1):
S = S + i*i*i # hoặc S = S + i**3
print("Tổng S là:", S)