Chuyển đến nội dung chính
Mô-đun 2 · Bài học 1 trong tổng số 45/36 trong khóa học~10 min
Bài học theo mô-đun (1/4)

cho các vòng lặp và phạm vi

Vòng lặp for trong Python được sử dụng để lặp qua chuỗi các mục: một danh sách, một chuỗi, một phạm vi, một lệnh… bất cứ thứ gì "có thể lặp lại".

Python
parole = ["ciao", "mondo", "!"]
for p in parole:
    print(p)
# ciao
# mondo
# !

Mẫu luôn giống nhau: for <variable> in <iterable>: theo sau là khối thụt lề sẽ được thực thi một lần cho mỗi mục.

range(...): tạo các khoảng nguyên

range tạo ra một chuỗi số nguyên lười biếng. Ba hình thức:

Python
range(5)         # 0, 1, 2, 3, 4
range(2, 6)      # 2, 3, 4, 5
range(0, 10, 2)  # 0, 2, 4, 6, 8     (step)
range(5, 0, -1)  # 5, 4, 3, 2, 1     (negative step)

range độc quyền ở đầu bên phải, như slice. Nó là một đối tượng lười biếng: nó không cấp phát bộ nhớ cho tất cả các số mà tạo ra từng số một.

Python
totale = 0
for i in range(1, 11):
    totale = totale + i
totale  # 55  (1+2+...+10)

Lặp lại với chỉ mục: enumerate

Khi bạn cần mục đó và chỉ mục của nó cùng nhau, hãy sử dụng enumerate:

Python
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
    print(i, p)
# 0 ciao
# 1 mondo
# 2 !

enumerate tạo ra (index, value) cặp mà chúng tôi gán trực tiếp cho hai các biến thông qua giải nén tuple (chúng ta sẽ thấy nó trong mô-đun dành riêng cho cấu trúc dữ liệu).

Lặp lại hai chuỗi song song: zip

Python
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
    print(f"{n} ha {a} anni")

zip dừng ở trình tự ngắn nhất.

range() và sự lười biếng của Python

Trong Python, hàm range() không phân bổ danh sách thực tế trong bộ nhớ: nó trả về một trình tạo lười tạo ra các số một tại một thời điểm theo yêu cầu (ví dụ: trong vòng lặp for). Điều này cho phép lặp qua hàng triệu số nguyên mà không làm đầy RAM. Để kiểm tra các giá trị phạm vi dưới dạng danh sách, bạn có thể truyền giá trị đó một cách rõ ràng bằng list(range(5)).

Hãy tự mình thử

tập thể dục#python.m2.l1.e1
Nỗ lực: 0Đang tải…

Tính tổng các số từ 1 đến 100 (bao gồm) bằng vòng lặp for trên phạm vi (...), gán nó cho `total` và đánh giá nó.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

range(1, 101) tạo ra 1, 2, ..., 100 (độc quyền ở bên phải).

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#python.m2.l1.e2
Nỗ lực: 0Đang tải…

Cho danh sách `words = ['uno', 'due', 'tre']`, xây dựng danh sách `cặp` chuỗi như '0:uno', '1:due', '2:tre' bằng cách sử dụng enumerate. Đánh giá `cặp`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

enumerate(words) trả về (chỉ mục, giá trị) tại mỗi lần lặp.

Giải pháp khả dụng sau 3 lần thử

Thử thách bổ sung

tập thể dục#python.m2.l1.e3
Nỗ lực: 0Đang tải…

Calculate the sum of all even numbers from 2 to 20 inclusive using a `for` loop over a `range`. Store the final sum in `even_sum` and evaluate it.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng phạm vi (2, 21, 2) để chỉ lặp lại các số nguyên chẵn từ 2 đến 20.

Giải pháp khả dụng sau 3 lần thử