Цикл for. Функция range()

23.06.2022 0 Автор : Дмитрий Николаевич
Цикл for. Функция range()
Данная статья посвящена циклу for, в частности функции range(), которая позволяет генерировать последовательность чисел. В данной статье мы изучим две дополнительные перегрузки функции range(), которые позволяют настраивать элементы последовательности.

Функция range() с одним параметром

Рассмотрим код:

for i in range(10):
    print('Привет', i)
Значение, которое мы указываем в скобках у функции range() обозначает количество итераций цикла, при этом переменная i принимает последовательно значения: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Перегрузка range() с двумя параметрами

Если мы хотим начинать последовательность не с 0, а с какого-то другого числа, то мы можем использовать перегрузку функции range() принимающую два параметра. Например, вызов функции range(1, 5) сгенерирует последовательность чисел 1, 2, 3, 4 (будьте внимательны, правая граница не включительно). Если нам нужны числа от 1 до 5 включительно, то мы используем range(1, 6). Таким образом:
  • range(n) создает последовательность чисел 0, 1, 2, 3, ..., n - 1;
  • range(n, m) создает последовательность чисел n, n + 1, n + 2, ..., m - 2, m - 1.

Напишем код, который выведет те числа из промежутка [100; 999], которые оканчиваются на 7.

Используя функцию range() с двумя параметрами мы получим:
for i in range(100, 1000): # перебор чисел от 100 до 999
    if i % 10 == 7: # используем остаток на 10, для получения последней цифры
        print(i)

Перегрузка range с тремя параметрами

Передавая два параметра в функцию range() мы можем генерировать любую последовательность целых чисел с шагом 1. Но, что делать если нужно поменять шаг? Как быть если мы хотим сгенерировать последовательность чисел 5, 10, 15, 20, 25? В этом случае существует еще одна перегрузка функции range(), принимающая три параметра: range(n, m, k). Первый параметр задает старт последовательности, второй параметр задает стоп последовательности и третий – шаг генерации чисел.
Например, вызов функции range(1, 10, 2) создаст последовательность чисел 1, 3, 5, 7, 9, а вызов функции range(5, 30, 5) сгенерирует последовательность 5, 10, 15, 20, 25.
Напишем программу, которая выводит все четные числа из промежутка [56; 170].
Используя функцию range() с тремя параметрами мы получим:
for i in range(56, 171, 2):
    print(i)

Обратите внимание что мы можем использовать функцию с двумя параметрами:

for i in range(56, 171):
    if i % 2 == 0:
        print(i)

Но, однако, такой код будет менее эффективным.

Отрицательный шаг генерации

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

Однако, в случае отрицательного шага, мы должны гарантировать, что старт последовательности, т.е. первый параметр, больше, чем конец последовательности (т.е., второй параметр).

Например, вызов range(20, 16, -1) создаст последовательность 20, 19, 18, 17, а вызов range(20, 10. -3) сгенерирует последовательность 20, 17, 14, 11.

Давайте напишем программу, которая отсчитывает от 5 до 1, а потом выведет текст «Генерация FRQ завершена» (ПРИМЕЧАНИЕ: Те, кто увлекается синтезом вокала UTAU, знают что такое FRQ, но здесь это просто как пример)

for i in range(5, 0, -1):
    print(i, end=' ')
print('Генерация FRQ завершена')

Результат будет:

5 4 3 2 1 Генерация FRQ завершена
Обратите внимание, что если величина шага отрицательная и первый параметр меньше второго, то range будет генерировать пустую последовательность. Например, вызов range(1, 10, -1) приведет к генерации пустой последовательности.

Пример использования функции range()

Вызов функции Последовательность чисел
range(10) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
range(1, 10) 1, 2, 3, 4, 5, 6, 7, 8, 9
range(3, 7) 3, 4, 5, 6
range(7, 3) пустая последовательность
range(2, 15, 3) 2, 5. 8, 11, 14
range(9, 2, -1) 9, 8, 7, 6, 5, 4, 3
range(3, 10, -2) пустая последовательность

Примечания

Примечание 1. Функция range() может принимать от одного до трех параметров: range(n), range(n, m), range(n, m, k)

  • первый параметр — это старт последовательности (включительно)
  • второй параметр — это стоп последовательности (не включительно)
  • третий параметр — это величина шага
Примечание 2. Функция range() может генерировать только целые числа, включая отрицательные.
Примечание 3. Величина шага не может равняться нулю. Следующий код:
for i in range(1, 10, 0):
    print(i)
приведет к ошибке ValueError: range() arg 3 must not be zero.

На этом у меня пока что все. Если есть вопросы, то задавайте их в комментариях или пишите их в форму обратной связи.