Уроки модуля (1/4)
для петель и диапазона
Цикл for в Python используется для перебора последовательности элементов:
список, строка, диапазон, словарь… все, что можно повторять.
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 останавливается на самой короткой последовательности.
range() и лень 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.
Показать подсказку
Используйте range(2, 21, 2) для перебора только четных целых чисел от 2 до 20.
Решение доступно после 3 попыток