Python

Range в Python: как использовать в цикле for

range() в Python создает диапазон целых чисел, по которому удобно проходить циклом for. Чаще всего его используют, когда нужно повторить действие заданное количество раз, вывести числа, сделать обратный отсчет или получить индекс

Главная деталь: правая граница в range() не входит в результат. Поэтому range(1, 6) дает числа 1, 2, 3, 4, 5, но не 6

По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы

По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы

Три формы range

У range() есть три основные формы записи

Запись Что означает Пример результата
range(stop) от 0 до stop, не включая stop range(5) дает 0, 1, 2, 3, 4
range(start, stop) от start до stop, не включая stop range(2, 6) дает 2, 3, 4, 5
range(start, stop, step) от start до stop с шагом step range(2, 10, 2) дает 2, 4, 6, 8

Сразу проверим это в коде:

print(list(range(5)))
print(list(range(2, 6)))
print(list(range(2, 10, 2)))

Результат:

[0, 1, 2, 3, 4]
[2, 3, 4, 5]
[2, 4, 6, 8]

list() здесь нужен только для просмотра результата. В обычном цикле превращать range() в список не нужно

range(stop): повторить действие несколько раз

Если указать одно число, диапазон начнется с нуля

for attempt in range(3):
    print(f'Попытка {attempt + 1}')

Результат:

Попытка 1
Попытка 2
Попытка 3

Внутри цикла переменная attempt получает значения 0, 1, 2. Для вывода человеку мы добавили + 1, потому что пользователю привычнее видеть попытки с единицы

Такой вариант подходит для повторений: три попытки, пять строк, десять тестовых запусков, несколько одинаковых запросов

range(start, stop): задать начало и конец

Если нужно начать не с нуля, передайте два аргумента

for number in range(1, 6):
    print(number)

Результат:

1
2
3
4
5

Почему не выводится 6? Потому что stop в Python не включается. Это правило работает в range(), срезах списков и многих других местах языка

Если нужно вывести числа от 1 до 10 включительно, пишите range(1, 11)

for number in range(1, 11):
    print(number)

range(start, stop, step): шаг

Третий аргумент задает шаг

for number in range(2, 11, 2):
    print(number)

Результат:

2
4
6
8
10

Так удобно выводить четные числа, пропускать элементы через один или делать таблицы с нужным интервалом

Пример: вывести каждый третий номер

for number in range(3, 16, 3):
    print(number)

Результат:

3
6
9
12
15

Шаг не обязан быть положительным. Для обратного отсчета нужен отрицательный шаг

for number in range(5, 0, -1):
    print(number)

print('Старт')

Результат:

5
4
3
2
1
Старт

Обратите внимание на границы: range(5, 0, -1) не включает 0, поэтому вывод заканчивается на 1

range и индексы списка

Иногда range() используют для работы с индексами

tasks = ['код', 'тест', 'публикация']

for index in range(len(tasks)):
    print(f'{index}: {tasks[index]}')

Результат:

0: код
1: тест
2: публикация

Это рабочий вариант, но в Python часто лучше использовать enumerate()

for index, task in enumerate(tasks):
    print(f'{index}: {task}')

Если нужен номер для человека, можно начать с единицы

for index, task in enumerate(tasks, start=1):
    print(f'{index}. {task}')

Результат:

1. код
2. тест
3. публикация

Правило такое: если нужен только элемент, используйте обычный for. Если нужен элемент и номер, используйте enumerate(). Если нужны именно числа или диапазон индексов, используйте range()

range не создает список сразу

В Python 3 range() возвращает специальный объект диапазона, а не готовый список всех чисел. Это экономит память

numbers = range(1_000_000)

print(numbers)

Результат будет похож на:

range(0, 1000000)

Это нормально. Числа выдаются по мере обхода в цикле. Поэтому range() можно спокойно использовать для больших диапазонов, если вы не превращаете его в список без необходимости

Частые ошибки

Первая ошибка — забыть, что правая граница не входит в диапазон

for number in range(1, 10):
    print(number)

Этот код выведет числа от 1 до 9. Чтобы получить 10, нужно написать range(1, 11)

Вторая ошибка — перепутать шаг и количество элементов

range(1, 10, 2)

Третий аргумент здесь означает шаг 2, а не «сделать два элемента»

Третья ошибка — использовать range(len(...)) там, где нужен сам элемент

names = ['Анна', 'Олег']

for index in range(len(names)):
    print(names[index])

Проще:

for name in names:
    print(name)

Четвертая ошибка — сделать отрицательный шаг, но оставить границы как для движения вперед

list(range(1, 5, -1))

Результат будет пустым списком, потому что от 1 нельзя дойти до 5 с шагом -1

Практические задачи

Выведите числа от 1 до 10

Выведите четные числа от 2 до 20

Сделайте обратный отсчет от 10 до 1

Выведите таблицу умножения на 7

Пронумеруйте список покупок через enumerate()

Выведите индексы только четных позиций списка через range(0, len(items), 2)

range() нужен для числовых последовательностей в цикле for. Самые важные правила: начало по умолчанию равно нулю, правая граница не включается, третий аргумент задает шаг

Не используйте range(len(...)) автоматически. В Python часто проще пройти по элементам напрямую или взять enumerate(), если нужен номер

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x