Python: Функция range()
Встроенная функция range() удобна в тех случаях, когда нужно повторить действие определённое количество раз.
Можно вызвать разными способами.
range(stop)
Функция с одним аргументом. Числа начинаются с 0 и идут до указанного числа, которое не учитывается. Шаг 1.
for i in range(3): print(i)
0 1 2
range(start, stop)
Функция с двумя аргументами. Указываем начальное и конечные значения (не входит в диапазон). Шаг 1.
# выводим значения от 1 до 5 for i in range(1, 6): print(i)
1 2 3 4 5
range(start, stop, step)
Функция с тремя аргументами. Третий аргумент задаёт шаг между соседними числами.
for i in range(10, 27, 5): print(i)
10 15 20 25
Для шага можно использовать отрицательные значения, чтобы пойти в обратную сторону.
for i in range(10, 5, -2): print(i)
10 8 6
Можно позвать на помощь функцию reversed(), чтобы выводить последовательность в обратном порядке.
for i in reversed(range(6)): print(i)
5 4 3 2 1 0
Проверим следующее выражение. Увидим, что имеем дело с классом range.
print(type(range(6)))
Можно получить доступ к объектам по индексу, как в списке:
print(range(3)[1])
Функция часто используется в циклах.
Урок 4.1. Знакомство с функцией «range()»
В рамках данного урока вы научитесь создавать свой первый цикл с оператором for, и этот навык вам пригодится в дальнейшей работе не раз. Это также поможет вам лучше понять преимущества использования циклов в программах.
Вы научитесь:
- Использовать функцию range()
- Использовать in для проверки принадлежности числа к диапазону значений
- Создавать цикл с оператором for
1.Функция range() является встроенной функцией в программировании на языке Python. Она используется для создания последовательности чисел. В данном уроке вы будете применять функцию range() для создания цикла с оператором for.
Откройте приложение Shell в вашем документе Python. Вы можете легко найти его через меню: ctrl+doc > Add Python > Shell.
Введите диапазон значений с помощью оператора присваивания:
r = range(10,20,2)
Функцию range() можно найти в меню: menu > Built-ins > Lists.
Теперь используйте оператор in, чтобы проверить, являются ли те или иные значения частью диапазона, например, 5 in r.
Обратите внимание на то, что результат будет показан в виде слова Верно или Неверно (True или False).
Попробуйте ввести другие значения, как показано в примере. Сама функция range() не содержит числа, а создает их при необходимости. При попытке отобразить функцию range() с помощью выражения print, она отобразится как есть.
2. Не выходите из приложения Shell, так как здесь удобно проверять работу некоторых функций, и при этом не нужно писать всю программу целиком.
Если вы введете r enter или print(r) enter, все, что вы получите в результате, будет значение диапазона range(. ).
Чтобы увидеть все значения диапазона range(), используйте оператор for:
Откройте следующие пункты меню: menu > Built-ins > Control и выберите:
for index in range(start, stop, step)

3. Просмотрите доступные подсказки (нажмите на tab, чтобы переходить от одной подсказке к другой):
index замените на i
start, stop, step замените на 10,20,2
block замените на print(i)
Посмотрите на рисунок. Обратите внимание на структурирование выражения print().

4. Нажмите на enter несколько раз, пока не запустится команда. После чего вы увидите ряд чисел: 10, 12, 14, 16 и 18. Число 20 не отображается.

Примечание для учителя: Функция range() является частью программирования на языке Python, и она используется только для создания последовательности чисел по запросу и с применением внутренних функций. Поэтому выражение print(range(5)) выдаст ответ range(5), а не числа, например, 0. 4. Далее, в этом блоке уроков мы будем подробнее рассматривать механизм создания списков с помощью функции range().
5. Напишите программу, используя оператор for. Для этого необходимо создать новый файл Python и добавить в него простое выражение с оператором for:
for index in range(size)
Сам оператор можно найти в меню: menu > Built-ins > Control.
Замените три подсказки (области, которые можно корректировать) на данные своего кода известным вам способом (size — это только одно значение). Попробуйте выполнить это самостоятельно.

6. Проверьте, похож ли ваш код на тот, что показан в примере на рисунке.
i может быть любой переменной, size может быть любым натуральным числом, а блок (block) можно представить в виде любого фрагмента кода. Попробуйте ввести print(«hello»), например.

7. Запустите программу. В результате должны отобразиться несколько целых чисел.
Если начальное значение не задано, то цикл начинается с 0. Цикл завершается на значении на единицу меньше заданного вами значения size (в примере size равен 10). Значение size — это верхний предел диапазона, но он не является его частью.
Если величина шага не задана, то по умолчанию она будет равна 1.

Примечание для учителя: Попробуйте подольше поэкспериментировать с разными вариантами циклов для закрепления навыков.
8. Существуют еще два варианта циклов с оператором for, в которых также используется функция range(). Их можно найти в пункте меню Control.
Сможете ли вы создать цикл обратного отсчета, который будет отображать цифры от 10 до 0 с шагом, равным 1? Попробуйте сделать это самостоятельно, прежде чем перейти к выполнению следующего шага.

9. У вас получилось примерно так, как показано в примере ниже?
Цикл останавливается на единице (это соответствует значению на 1 меньше, чем стоп-значение).
Подсказка: Такой разделенный экран можно сделать, если нажать на ctrl+4 (Сгруппировать) в редакторе Editor. История приложения Shell будет очищена. Для того чтобы снова запустить программу, нажмите ctrl+R в редакторе Editor.
Еще раз напомним, что стоп-значение цикла не включено в тело самого цикла (блок/block).

Примечание для учителя: Группировка и Разделение: В языке программирования TI-Nspire комбинация клавиш ctrl+4 позволяет объединить на одной странице приложения с разных страниц (с текущей и со следующей). Комбинация ctrl+6 их разъединяет.
Эту функцию также можно найти в следующих пунктах меню: doc > Page Layout:

10. Напишите программу, которая отображает квадрат чисел между (и включительно) двумя введенными числами с помощью функции input().
В новом документе запишите два выражения, чтобы ввести нижний и верхний предел диапазона.
Затем добавьте цикл с оператором for, используя шаблон start, stop (начальное и конечное значение).
Блок (block) цикла должен отображать только число и его квадрат с помощью выражения print.
Сравните свою программу с тем примером, который показан в следующем шаге.

11. Вы допустили ту же самую ошибку, что и мы? Два конечных значения, верхнее значение и его квадрат (10 и 100, соответственно) не включены в результат.
Выражение range() должно быть в следующем виде:
range(lower, upper + 1)
Вы использовали выражения num*num или num**2 в примере?
Не забудьте сохранить свою работу!

Примечание для учителя: Выражения num*num и num**2 нужны для возведения числа в квадрат. Сложнее всего в выражении for i in range() — это понять, что стоп-значение не обрабатывается. Это как в цикле с оператором while, где используется знак < вместо знака
В программировании на большинстве других языков (особенно Basic) стоп-значение включено в цикл. Но это не распространяется на язык Python.Циклы с оператором for в языке Python также имеют выражение else, которое выполняется после того, как цикл завершается обычным образом. То есть не прерывается с помощью оператора выхода из цикла break.
Цикл for и функция range в Python
В программирование часто сталкиваются с вопросом перебрать весь список и извлечь из него необходимые данные. Цикл for позволяет перебрать любой итерируемый объект, то есть объект, из которого команда for сможет брать элементы по одному, пока не будет обработан последний элемент, не зависимо от его длины.
| Содержание страницы: |
|---|
| 1.1. Цикл for в Python |
| 1.2. Аргумент end фунции print |
| 1.3. Действия во время выполнения цикла for |
| 1.4. Основные ошибки с циклом for |
| 2.1. Встроенная функция range |
| 2.2. Создание числового списка с помощью функции range |
| 2.4. Перебор списка по индексам с помощью функции range |
| 3. Генераторы списков |
1. Цикл for в Python.
У нас есть список и для того, чтобы не обращаться к каждому элементу по отдельности, мы можем воспользоваться циклом for . В следующем примере переберем список с брендами автомобилей.
>>> cars = [‘ford’, ‘opel’, ‘audi’, ‘land rover’, ‘bmw’]
>>> for brend in cars :
. print(brend) # отступ в 4 пробела
.
ford
opel
audi
land rover
bmw
Во второй строке кода определяется цикл for . Python берет каждую торговую марку из списка и сохраняет его в переменной brend. После двоеточия код на следующей строке должен начинается с 4 пробелами. С помощью функции print, название марки выводится в переменной brand. Затем код повторяется до тех пор, пока не закончатся элементы в списке.
1.2. Аргумент end фунции print .
Функция print выводит свой аргумент, после чего курсор перемещает на следующую строку, но при большом количестве элементов в списке, не всегда это удобно. Можно воспользоваться аргументом end, записав его после переменной.
>>> cars = [‘ford’, ‘opel’, ‘audi’, ‘land rover’, ‘bmw’]
>>> for brend in cars :
. print(brend, end=’ ‘) # отступ в 4 пробела
.
ford opel audi land rover bmw
Аргумент end записывается в виде end= ‘ ‘ . Какое количество пробелов вы укажите, такое и будет после выводится между переменными.
1.3. Действия во время выполнения цикла for .
Во время цикла for помимо вывода элементов, с ними можно выполнять различные действия. К примеру, можно выводить сообщения с каждым проходом цикла, для этого воспользуемся f-строками.
>>> cars = [‘ford’, ‘opel’, ‘audi’, ‘land rover’, ‘bmw’]
>>> for brend in cars :
. print(f»Автомобили торговой марки очень надежные»)
.
Автомобили торговой марки Ford очень надежные
Автомобили торговой марки Opel очень надежные
Автомобили торговой марки Audi очень надежные
Автомобили торговой марки Land Rover очень надежные
Автомобили торговой марки Bmw очень надежные
Со строками цикл for работает также как и со списком.
>>> mesage = ‘Hello World!’
>>> for i in mesage :
. print(i * 5, end=’ ‘)
.
HHHHH eeeee lllll lllll ooooo WWWWW ooooo rrrrr lllll ddddd .
1.4. Основные ошибки с циклом for .
В Python связь одной строки кода с предшествующей строкой обозначается отступами. В больших программах встречаются блоки кода с отступами в несколько разных уровней. Благодаря отступам, сильно упрощается чтение кода. Основные ошибки как раз и складываются из ошибок в пропущенных или лишних отступах.
- Пропущенный отступ.
>>> mesage = ‘Hello World!’
>>> for i in mesage :
. print(i * 5, end=’ ‘) # нет отступа в 4 пробела
File «», line 2
print(i * 5, end=’ ‘)
^
IndentationError: expected an indented block
Для устранения этой ошибки, достаточно поставить в следующей строке после команды for 4 пробела. В основном, если вы работаете в любом современном текстовом редакторе, то после двоеточия он сам поставит отступы на следующей строке.
- Лишний отступ.
- Пропущенное двоеточие.
2. 1. Встроенная функция range .
Встроенная функция range() используется для построения числовых последовательностей. В примере используем команду for и функцию range для выполнения ровно 10 итераций с выводом значения от 0 до 10.
>>> for x in range(10) :
. print(x, end=’ ‘)
.
0 1 2 3 4 5 6 7 8 9
При передаче только одного аргумента, последовательность будет начинаться с 0 и до значения аргумента (10), не включая его. Одна из самых распространённых ошибок, это когда разработчик предполагает, что значение аргумента функции range включается в сгенерированную последовательность.
Приведем пример с двумя аргументами. Выведем последовательность от 20 до 30.
>>> for x in range(20, 30) :
. print(x, end=’ ‘)
.
20 21 22 23 24 25 26 27 28 29
2.2. Создание числового списка с помощью функции range .
- С помощью функции range удобно строить числовые списки.
>>> numbers = list( range(5, 25) )
>>> print(numbers)
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
- Функция range может создавать последовательности, пропуская числа в заданном диапазоне. Например, приведем пример построения списка от 0 до 100, с шагом 15.
>>> numbers = list( range(0, 100, 15) )
>>> print(numbers)
[0, 15, 30, 45, 60, 75, 90]
- С помощью цикла for и функции range можно создавать практически любой числовой список. К примеру, создадим список квадратов всех числе от 1 до 10. Операция возведения в степень обозначается двумя звездочками ( ** ).
>>> a = []
>>> for i in range(1, 11) :
. a.append(i**2)
.
>>> print(a)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
На каждом цикле переменная возводится в квадрат и добавляется в список.
2.4. Перебор списка по индексам с помощью функции range
С помощью цикла for и функции range список можно перебирать по индексам и с каждым значением в списки, производить любые операции. Приведем пример, перебора списка по индексам, с помощью функции range и функции len, которая определяет длину списка.
>>> list_1 = [1, 3, 5, 10, 12, 20]
>>> for index in range ( len (list_1)):
. list_1[ index ] += 100
.
>>> print(list_1)
[101, 103, 105, 110, 112, 120]
В начале определим длину списка с помощью функции len . Затем это значение передается функции range . В нашем примере длина списка равна 6. С каждым проходом цикла for, index принимает значения от 0 до 6 (не включая 6). В теле цикла мы вызываем список list_1 и обращаемся к элементам списка по индексам, равные значению переменной index . Каждое значение индекса мы увеличивает на 100. Затем с помощью функции print выводим список на экран и видим что все значения увеличены на 100.
С помощью индексов и функции range мы можем объединять информацию из разных списков. В примере ниже мы имеем список с именами, а второй список с фамилиями. Выведем на экран имя и фамилию:
>>> list_4 = [‘Artem’, ‘Serg’, ‘Georgy’, ‘Petr’]
>>> list_5 = [‘Ivanov’, ‘Petrov’, ‘Sidorov’, ‘Ulyanov’]
>>> for index in range ( len (list_4)):
. print(list_4[ index ], list_5[ index ])
.
Artem Ivanov
Serg Petrov
Georgy Sidorov
Petr Ulyanov
В результате получили общие данные на экране.
Аналогично можно создавать новые списки из двух или трех списков. Приведем пример перемножения трех списков:
>>> list_1 = [1, 3, 5, 10, 12, 20]
>>> list_2 = [20, -9, 42, 10, 755, 12]
>>> list_3 = [12, 85, 96, 155, 235, 12]
>>> list_new = []
>>> for index in range ( len (list_1)):
. list_new.append(list_1[ index ] * list_2[ index ] * list_3[ index ])
.
>>> print(list_new)
[240, -2295, 20160, 15500, 2129100, 2880]
В начале мы создадим пустой новый список вне цикла, куда будем добавлять результат с помощью функции append. В результате мы получим новый список с результатом перемножения предыдущих списков по индексам.
Важно помнить, что программа будет работать, если вы уверены, что списки одинаковой длины. Проверить это вы всегда можете с помощью встроенной функции len .
3. Генераторы списков в Python .
Состоящий выше пример построения квадратов чисел в разделе 2.2 состоял из нескольких строк кода. Генератор списка позволяет сгенерировать тот же список, но всего в одной строке. Определите название списка, после откройте квадратные скобки. Запишите выражение для значений, в нашем случает i ** 2. Затем напишите цикл for для генерирования чисел, которые будут передаваться выражению и закройте квадратные скобки.
>>> a = [i ** 2 for i in range(1,11)]
>>> print(a)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
В результате получился аналогичный список.
Python: функция range()
Функция range является одной из встроенных функций, доступных в Python. Он генерирует серию целых чисел, от значения start до stop, указанного пользователем. Мы можем использовать его для цикла for и обходить весь диапазон как список.

Функция range() принимает один обязательный и два необязательных параметра. Это работает по-разному с различными комбинациями аргументов. В этом руководстве мы познакомим вас со всеми возможностями данной функции Python, чтобы вы могли легко использовать ее в своих задачах.
Существует два варианта функции range() в Python 3. Давайте проверим их синтаксис по одному.
Range(Stop)
Это самая основная форма range(). Требуется один аргумент для указания исключительного (Stop) верхнего предела.
«0» становится отправной точкой для генерации чисел. Смотрите пример ниже.
>>> robj = range(5) >>> for it in robj: . print(it, end = ",") . 0,1,2,3,4,
Посмотрите другой пример. Диапазон со стоп-значением «0» генерирует пустой диапазон, то есть нулевые элементы.
>>> r = range( 0 ) >>> print( r ) range(0, 0) >>> len( r ) 0
Если вы предоставляете нецелочисленное значение остановки, тогда оно вызывает ошибку TypeError.
>>> range(1.1) TypeError: 'float' object cannot be interpreted as an integer
Range(Start, Stop[, Step])
Это немного сложная форма функции range. Здесь вы можете создать серию чисел с общей разницей по вашему выбору.
Вы можете передать следующие три аргумента:
- ‘start’ -> Начальная точка для генерации чисел в range()
- ‘stop’ -> Это точка перед завершением range().
- ‘step’ -> Общая разница или счетчик приращений между двумя значениями
Обратите внимание на следующие моменты при использовании range() с вышеуказанной подписью.
- Значение по умолчанию «step» равно 1. Оно вступает в действие, когда аргумент step отсутствует.
- Нулевое значение для «шага» приводит к ошибке ValueError.
- Нецелое значение вызывает TypeError.
- Ненулевое целочисленное значение шага (> = стоп) по крайней мере вернет диапазон с одним элементом.
Обратите внимание, что функция range принимает только целочисленные аргументы. Чтобы создать диапазон с плавающей точкой, следуйте данному руководству: Генерация плавающего диапазона в Python
Функция Python Range() с примерами
Посмотрите примеры кода ниже, чтобы понять эту функцию немного глубже:
Использование параметров Start, Stop и Step
>>> # Range with two arguments . for it in range(1, 7): . print(it, end = ", ") . 1, 2, 3, 4, 5, 6, >>> >>> # Range with three arguments . for it in range(1, 7, 3): . print(it, end = ", ") . 1, 4, >>>
Использование отрицательных значений start, stop и step
Мы можем передавать отрицательные значения для всех параметров диапазона, таких как аргументы start, stop и step.
В приведенном ниже примере мы предоставляем отрицательное значения для stop и step, чтобы выполнить цикл в обратном направлении.
>>> # Range with -ve values . for it in range(10, -1, -2): . print(it, end = ", ") . 10, 8, 6, 4, 2, 0
Генерация диапазона как арифметический ряд
Давайте создадим арифметический ряд (i = 10, n = 100, d = 10), используя метод range().
>>> list(range( 10, 100, 10 )) [10, 20, 30, 40, 50, 60, 70, 80, 90]
Объект range() работает как генератор. Следовательно, мы преобразовали его в список, чтобы мы могли распечатать значения.
Перебор списка с использованием range()
Мы можем использовать функцию Python range() для обхода списка. Смотрите пример ниже.
>>> books = ['python', 'data science', 'machine learning', 'AI', 'deep learning'] >>> size = len(books) >>> for it in range(0, size): . print(books[it]) . python data science machine learning AI deep learning
Преобразовать диапазон в список
Python 3 range() создает объект типа генератора. По ходу цикла он выбирает значения одно за другим, а не получает их все сразу.
В действительности выходные данные функции range() представляют собой неизменяемую последовательность целых чисел. Следовательно, мы можем преобразовать то же самое в список Python. Мы будем использовать конструктор списка для преобразования вывода диапазона в список.
Смотрите пример ниже.
>>> r = range( 10, 100, 10 ) >>> type( r ) >>> r = list( r ) >>> type( r ) >>> print(r) [10, 20, 30, 40, 50, 60, 70, 80, 90]
Верхний предел range включительно
По умолчанию Python range() по умолчанию исключает последнее число. Следовательно, он всегда игнорирует верхний предел своего вывода.
Однако мы можем внести следующие изменения в наш код, чтобы разрешить это.
- Увеличьте значение stop с помощью счетчика шагов
- Передайте новое значение stop в функцию range()
После внесения вышеуказанных изменений, давайте посмотрим, что происходит:
>>> start = 0 >>> stop = 7 >>> step = 1 >>> >>> stop = stop + step >>> >>> for it in range(start, stop, step): . print(it, end = ", ") . 0, 1, 2, 3, 4, 5, 6, 7
Range Python против Xrange
Мы изложили несколько отличий и некоторые ключевые факты о функциях range и xrange.
В Python 2.x было две функции диапазона: range() и xrange()
- Разница между ними заключается в том, что range() возвращает список, тогда как последний возвращает итератор.
В Python 3.x у нас есть только одна функция range(). Это реализация xrange() из версии 2.x.
- Новая функция range() не возвращает ни список, ни итератор. Он получает новый тип, известный как объект диапазона.
- Мы можем перебирать объект диапазона как список. Но это немного отличается, так как мы не можем нарезать его.
- В отличие от итераторов, которые выдают одно значение за раз, функция range() получает все числа одновременно. Следовательно, он имеет высокие требования к памяти.
- Тем не менее, диапазон работает быстрее с небольшим набором чисел.
# python 2.x >>> type(range(1)) type 'list' >>> type(xrange(10)) class 'xrange' # python 3.x >>> type(range(10)) class 'range'
Использование индекса с результатом работы range Python
Да, range() возвращает уникальный объект, который обладает свойствами, подобными списку и генератору.
Поскольку он действует как последовательность, мы можем получить доступ к его элементам, используя индексы. Он допускает как положительные так и отрицательные значения индекса.
# Indexing Python range object >>> print(range(0, 7)[1]) 1 >>> print(range(0, 7)[6]) 6
Объединить вывод двух функций range()
В Python нет встроенной функции для объединения результатов двух результатов range(). Тем не менее, мы все еще можем сделать это.
Существует модуль с именем ‘itertools’, который имеет функцию chain() для объединения двух объектов диапазона.
Смотрите пример ниже.
>>> from itertools import chain >>> merged = chain(range(5), range(10, 15)) >>> for it in merged: . print(it, end = ", ") . 0, 1, 2, 3, 4, 10, 11, 12, 13, 14
В заключение
Вот несколько важных фактов о функции Python range():
- В качестве аргументов допускаются только целочисленные значения.
- Мы не можем предоставить параметр типа string или float внутри функции range().
- Аргументы могут быть либо как положительные так и отрицательные.
- Он не принимает «0» в качестве значения step. Если шаг равен «0», функция генерирует ошибку ValueError.
