Цикл for и range в Python: повторить известное число раз
Автор: Казачкин Даниил Михайлович · Обновлено
Цикл for по range перебирает заранее построенную последовательность целых чисел. Правая граница range не включается: range(2, 6) даёт 2, 3, 4, 5. Третий аргумент задаёт шаг и может быть отрицательным.
Три формы range
for number in range(1, 6):
print(number, number ** 2)Результат:
1 1
2 4
3 9
4 16
5 25range(5) начинает с нуля и заканчивает на четырёх. range(1, 6) явно задаёт начало и невключённый конец. range(10, 3, -2) выдаст 10, 8, 6, 4; при отрицательном шаге начальное значение должно быть больше конечного.
Ошибка на единицу
Чтобы перебрать числа от 1 до n включительно, нужна правая граница n + 1. Новички часто пишут range(1, n) и теряют последнее число. Лучшая проверка — выписать фактические значения для маленького n, а не пытаться запомнить правило абстрактно.
Не меняйте переменную цикла в надежде управлять range: на следующей итерации for присвоит ей очередное значение последовательности. Если индекс не используется, принято имя underscore, но для учебной трассировки осмысленное имя полезнее.
Таблица кратных чисел
Прочитайте n и выведите числа от 1 до n вместе с их тройными значениями. Для n = 4 ожидаются пары 1–3, 2–6, 3–9, 4–12. Затем выведите все чётные числа от 2 до n через range с шагом 2. Проверьте n = 1 и n = 2: эти границы сразу обнаруживают потерянный последний элемент.
Диапазон до запуска
Для выражений range(5), range(2, 7), range(8, 2, -2) и range(2, 8, -2) выпишите последовательности вручную. Последний диапазон окажется пустым: шаг удаляет значение от невключённой границы. Подтвердите результат через list только после прогноза. Затем напишите функцию, которая печатает обратный отсчёт от n до 1, и проверьте n = 1 и n = 0. Сопоставьте каждый аргумент range с началом, стопом и шагом. Это упражнение устраняет ошибки границ до того, как они спрячутся внутри большого цикла.
Практикум: границы range на арифметической прогрессии
Выведите числа 3, 6, 9, 12 и 15 через range, затем их индексы от 1 до 5. Для аргументов start, stop, step заранее запишите первое включённое и первое исключённое значение. Проверьте пустой диапазон и движение с отрицательным шагом от 5 до 1. Посчитайте сумму прогрессии циклом и сравните с ручным результатом. Не исправляйте пропущенную границу случайным +1: объясните, почему именно это значение делает конец достижимым.
Контрольная точка
Что выдадут range(1, 5), range(5, 1) и range(5, 1, -1)? Ответьте через направление шага и исключённую правую границу.
Частые вопросы
Почему последнее значение range не включается?
Полуоткрытый интервал удобно сочетать с длиной последовательности и индексами от 0 до len - 1. При этом число шагов и соседние диапазоны рассчитываются без двойного включения границы.