Модульні уроки (1/4)
для петель і діапазону
Цикл for в Python використовується для повторення послідовності елементів:
список, рядок, діапазон, dict... все, що є "ітерованим".
parole = ["ciao", "mondo", "!"]
for p in parole:
print(p)
# ciao
# mondo
# !Шаблон завжди однаковий: for <variable> in <iterable>:, за яким іде
блок із відступом, який буде виконано один раз для кожного елемента.
range(...): генерація цілочисельних інтервалів
range створює відкладену послідовність цілих чисел. Три форми:
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 є ексклюзивним у правому кінці, як і slice. Це ледачий об'єкт:
він не виділяє пам'ять для всіх чисел, він створює їх по одному.
totale = 0
for i in range(1, 11):
totale = totale + i
totale # 55 (1+2+...+10)Ітерація з індексом: enumerate
Якщо вам потрібен елемент і його індекс разом, використовуйте enumerate:
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
print(i, p)
# 0 ciao
# 1 mondo
# 2 !enumerate створює (index, value) пари, які ми призначаємо безпосередньо двом
змінні за допомогою розпакування кортежів (ми побачимо це в модулі, присвяченому
структури даних).
Ітерація двох послідовностей паралельно: zip
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
print(f"{n} ha {a} anni")zip зупиняється на найкоротшій послідовності.
діапазон() і лінь Python
У Python функція range() не виділяє фактичний список у пам’яті: вона повертає лінивий генератор, який видає числа по одному за запитом (наприклад, у циклі for). Це дозволяє повторювати мільйони цілих чисел без розвантаження оперативної пам’яті. Щоб перевірити значення діапазону як список, ви можете явно привести його за допомогою list(range(5)).
Спробуйте самі
Обчисліть суму чисел від 1 до 100 (включно) за допомогою циклу for over range(...), призначте її до `total` і обчисліть.
Показати підказку
range(1, 101) генерує 1, 2, ..., 100 (виключно праворуч).
Рішення доступне після 3 спроб
Повторна вправа
Маючи список `words = ['uno', 'due', 'tre']`, побудуйте список `пар` рядків, таких як '0:uno', '1:due', '2:tre' за допомогою enumerate. Оцініть `пари`.
Показати підказку
enumerate(words) повертає (індекс, значення) на кожній ітерації.
Рішення доступне після 3 спроб
Додатковий виклик
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.
Показати підказку
Використовуйте діапазон (2, 21, 2), щоб перебирати лише парні цілі числа від 2 до 20.
Рішення доступне після 3 спроб