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".
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:
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.
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:
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
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í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ó.
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
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`.
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
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.
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ử