Python

Как указать промежуток в Python: range, границы и шаг

В Python промежуток чисел чаще всего задают функцией range(). Ее используют в циклах, когда нужно повторить действие несколько раз или пройти по числам от одного значения до другого

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

Короткий ответ

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

Результат

1
2
3
4

Если нужно вывести числа от 1 до 5 включительно, правую границу нужно увеличить на 1

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

Три формы range

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

range(stop)
range(start, stop)
range(start, stop, step)

range(5) даст числа от 0 до 4

for i in range(5):
    print(i)

range(2, 6) даст числа от 2 до 5

for i in range(2, 6):
    print(i)

range(2, 10, 2) даст числа от 2 до 8 с шагом 2

for i in range(2, 10, 2):
    print(i)

Почему правая граница не включается

Это правило кажется странным в начале, но оно удобно для программирования. Например, индексы списка идут от 0 до len(items) - 1, поэтому цикл по индексам выглядит естественно

items = ["a", "b", "c"]

for index in range(len(items)):
    print(index, items[index])

Результат

0 a
1 b
2 c

len(items) равно 3, а range(3) дает 0, 1, 2. Это ровно допустимые индексы списка

Как задать шаг

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

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

Результат

0
2
4
6
8
10

Шаг может быть любым целым числом, кроме нуля

for number in range(5, 51, 5):
    print(number)

Так можно вывести числа 5, 10, 15 и дальше до 50

Как идти назад

Для движения назад нужен отрицательный шаг

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

Результат

5
4
3
2
1

Здесь 0 не включается, потому что правая граница по-прежнему исключается

Если нужно вывести от 5 до 0 включительно

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

Как получить список из range

range() не создает список сразу. Это объект, по которому можно проходить в цикле. Если нужно увидеть все числа списком, используйте list()

numbers = list(range(1, 6))
print(numbers)

Результат

[1, 2, 3, 4, 5]

В обычном цикле list() не нужен. Пишите for number in range(...), и Python сам будет брать значения по одному

Как использовать range для повторения действия

Если переменная цикла не нужна, часто используют _

for _ in range(3):
    print("Привет")

Результат

Привет
Привет
Привет

Это читается как «повтори действие 3 раза»

Как пройти по списку правильно

Не всегда нужен range(len(items)). Если индекс не нужен, проходите прямо по элементам

names = ["Аня", "Игорь", "Дина"]

for name in names:
    print(name)

Если нужен и индекс, и элемент, используйте enumerate()

names = ["Аня", "Игорь", "Дина"]

for index, name in enumerate(names):
    print(index, name)

Такой код обычно читается лучше, чем ручная работа с индексами

Мини-практика

Создайте файл range_lesson.py

print("Числа от 1 до 5")
for number in range(1, 6):
    print(number)

print("Четные числа от 2 до 10")
for number in range(2, 11, 2):
    print(number)

print("Обратный отсчет")
for number in range(5, 0, -1):
    print(number)

Запустите файл и поменяйте границы. Особенно полезно самому увидеть, что правая граница не включается

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

Первая ошибка — ожидать, что range(1, 5) выведет 5. Не выведет, потому что правая граница исключается

Вторая ошибка — поставить шаг 0. Так делать нельзя, Python выдаст ошибку

range(1, 10, 0)

Третья ошибка — использовать range, когда можно пройти по списку напрямую. Если индекс не нужен, цикл по элементам обычно проще

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

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

Настройки cookie

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