Цикл for в Python предназначен для последовательного прохождения по элементам структур данных и некоторых других объектов. Этот цикл отличается от цикла for, характерного для многих других языков, где он выступает в роли счетчика.

Что подразумеваем под "перебором элементов"? Представьте, что у нас есть список с несколькими элементами. Сначала мы берем первый элемент, затем второй, потом третий и так далее. Над каждым элементом выполняются одинаковые операции внутри цикла for. При этом не нужно указывать индексы и беспокоиться, когда элементы закончатся, ведь цикл for сделает это за нас.

>>> spisok = [10, 40, 20, 30]
>>> for element in spisok:
...     print(element + 2)
...
12
42
22
32

Переменная element используется в ключевом слове for, но имя может быть произвольным, например, i. Во время каждой итерации for она принимает очередной элемент из списка spisok. Таким образом, при первой итерации element станет равен 10, на второй - 40 и так далее. Как только элементы списка spisok заканчиваются, цикл прекращает выполнение.

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

В приведенном примере каждый элемент увеличивался на 2, выводился на экран, но сам список не менялся:

>>> spisok
[10, 40, 20, 30]

Мы никак не изменяли элементы списка, они только извлекались и использовались. Однако, если возникает необходимость изменения самого списка, например, изменения значений элементов, удовлетворяющих определенным условиям, то без переменной для индекса не обойтись:

>>> i = 0
>>> for element in spisok:
...     spisok[i] = element + 2
...     i += 1
...
>>> spisok
[12, 42, 22, 32]

Однако использование счетчика делает преимущества цикла for не такими очевидными. Если заранее известна длина списка, то целесообразнее применять цикл while. Определить длину можно благодаря встроенной функции len() в Python:

>>> i = 0
>>> while i < len(spisok):
...     spisok[i] = spisok[i] + 2 # или spisok += 2
...     i = i + 1 # или i += 1
...
>>> spisok
[14, 44, 24, 34]

Цикл while позволяет избавиться от переменной element.

Функция range()

Поговорим о встроенной функции Python range(). Переводится как "диапазон". У нее может быть один, два или три аргумента. Они аналогичны аргументам функции randrange() из модуля random. Если задан один аргумент, генерируются числа от 0 до указанного числа, исключая его. Два аргумента означают генерацию чисел от первого до второго, исключительно. С тремя аргументами третье значение - это шаг.

В отличие от randrange(), функция range() не генерирует случайные числа. Она возвращает последовательность чисел в указанном диапазоне. Например, range(5, 11) создаст последовательность 5, 6, 7, 8, 9, 10. При этом это не список. range() производит объекты собственного класса – диапазоны:

>>> a = range(-10, 10)
>>> a
range(-10, 10)
>>> type(a)
<class 'range'>

Несмотря на невидимость последовательности чисел, она существует, и доступ к элементам возможен:

>>> a[0]
-10
>>> a[5]
-5
>>> a[15]
5
>>> a[-1]
9

Однако изменить их нельзя, ведь, в отличие от списков, объекты range() неизменяемы:

>>> a[10] = 100
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'range' object does not support item assignment

Цикл for и range()

Зачем нам функция range() наряду с циклом for? Дело в том, что они образуют удачное сочетание. Цикл for, в отличие от while, позволяет не следить за тем, достигнут ли конец структуры. Range, в свою очередь, предоставляет последовательность целых чисел, которые можно использовать в качестве индексов элементов списка.

>>> range(len(spisok))
range(0, 4)

В этом фрагменте функция len() определяет длину списка, которая равна четырем. Число 4 передается в range(), и функция генерирует последовательность чисел от 0 до 3 включительно. Это индексы нашего списка.

Теперь объединяем for и range():

>>> for i in range(len(spisok)):
...     spisok[i] += 2
...
>>> spisok
[16, 46, 26, 36]

В заголовке цикла for перебираем не элементы списка, а объект range. Сам список не обязан упоминаться. Если заранее известна длина, заголовок может быть в виде: for i in range(4). Как используется i в цикле, это уже вопрос второй. Примечание: индикатор i можно заменить на любое другое имя.

Практическая работа

  1. Создайте список, наполненный случайными числами. В коде используйте цикл for, функции range() и randint().
  2. Преобразуйте объект range (диапазон) в список с помощью встроенной функции list(), создав диапазон с элементами от 0 до 100 с шагом 17.
  3. Определите количество отрицательных чисел в списке, состоящем из положительных и отрицательных чисел, и выведите результат.
  4. Создайте программу, которая заполняет список пятью введенными словами, определяет длину каждого и добавляет их в другой список. Например, список слов – ['yes', 'no', 'maybe', 'ok', 'what'], список длин – [3, 2, 5, 2, 4]. Оба списка следует вывести на экран.

Вопросы для самопроверки:

  1. В чем отличие цикла for от цикла while?
  2. Как происходит перебор элементов в цикле for в Python?
  3. Можно ли менять элементы списка внутри цикла for без использования переменной-счетчика? Почему?
  4. Как сочетание цикла for и функции range() может быть полезно при работе со списками?

Программа курса:

  1. Описание курса
  2. Эволюция и основы языков программирования

    История программирования в кратком и понятном изложении. Что такое машинный язык, почему появились ассемблеры, языки высокого уровня и объектно-ориентированные. Зачем нужен транслятор, и почему он может быть либо компилятором, либо интерпретатором.

  3. Знакомство с основами Python

    Особенности языка Python, работа в интерактивном режиме и подготовка файлов с исходным кодом.

  4. Типы данных и переменные в Python

    Базовые типы данных в Python: целое, вещественное числа, строки. Изменение типа данных с помощью встроенных функций. Понятие об операциях и переменных. Присваивание значения переменной.

  5. Ввод и вывод данных с Python функциями

    Для вывода на экран в Python 3.x используется функция print(). Вывод может быть предварительно отформатирован. Для ввода данных с клавиатуры используется функция input(), которая возвращает в программу строку.

  6. Логические выражения и операторы в Python

    Логические выражения. Логические операторы языка Python: == (равно), != (не равно), (больше), = (больше или равно), and (логическое И), or (логическое ИЛИ), not (отрицание).

  7. Ветвление и условные операторы в Python

    Управление потоком программы с помощью операторов if-else. Создание логических ветвлений, обработка условий и выполнение разных блоков кода в Python.

  8. Изучите обработку ошибок и исключений в Python

    Общее представление об ошибках и исключениях в языке программирования Python. SyntaxError, NameError, TypeError, ValueError, ZeroDivisionError. Обработка исключений с помощью инструкции try-except.

  9. Множественное ветвление с if-elif-else в Python

    Оператор множественного ветвления языка Python позволяет организовать более двух веток выполнения программы без необходимости вложения условных операторов друг в друга. Конструкция включает одну ветку if, произвольное количество elif и необязательную ветку else.

  10. Цикл while и его применение в Python

    С помощью циклов в программировании организуется многократное следующее друг за другом выполнение одних и тех же участков кода. Бывают циклы с условием и со счетчиком. К первым относится цикл while, или цикл "пока".

  11. Изучите функции и их применение в Python

    Функции - важный элемент структурного программирования. Они позволяют обособить участок кода, выполняющий определенную задачу. В дальнейшем к нему можно обращаться из разных мест программы по имени, которым он назван. В языке Python функции определяются с помощью оператора def.

  12. Локальные и глобальные переменные в Python

    В программировании важное значение имеет представление о локальных и глобальных переменных. Локальные переменные существуют внутри функций и не доступны за ее пределами. Глобальные переменные видны во всей программе.

  13. Оператор return и возврат значений в Python

    С помощью оператора return можно вернуть значение из тела функции в основную программу. В языке программирования Python можно вернуть несколько значений, перечислив их через запятую после оператора return. Также в функции может быть несколько return, но всегда выполняется только один из них.

  14. Параметры и аргументы функций в Python

    Если функция имеет параметры, то при вызове в нее можно передавать данные в виде аргументов-значений или аргументов-ссылок. Параметры перечисляются в заголовке функции в скобках после имени, представляют собой локальные переменные. В Python тип параметров не указывается, хотя в других языках это может быть обязательным требованием.

  15. Встроенные функции Python для работы

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

  16. Использование модулей в Python

    Использование модулей в программировании позволяет изолировать код, выполняющий частные задачи, в отдельные файлы. После чего обращаться к нему из разных программ. Создание модулей - следующий шаг после функций, когда участок кода обособляется внутри одного файла-программы. Для языка Python есть множество встроенных и сторонних модулей.

  17. Генерация псевдослучайных чисел в Python

    Для генерации псевдослучайных чисел в языке программирования Python используются функции модуля random. Функция random() генерирует вещественное число от 0 до 1. Функции randint() и randrange() производят целые псевдослучайные числа в указанных диапазонах.

  18. Изучение списков в Python - основы и операции

    Списки в Python - это аналог массивов в других языках программирования. Однако список может содержать элементы разных типов. В терминологии Python список - это изменяемая упорядоченная структура данных. Можно заменять его элементы, добавлять и удалять их, брать срезы. В язык встроены методы для работы со списками.

  19. Изучение цикла for в Python

    Цикл for в языке программирования Python предназначен для перебора элементов структур данных (списков, словарей, кортежей, множеств) и многих других объектов. Это не цикл со счетчиком, каковым является for во многих других языках. Нередко цикл for используется совместно с функцией range(), генерирующей объекты-диапазоны.

  20. Строки в Python - методы и срезы

    В Python строки - это неизменяемые последовательности символов или подстрок. Из них, так же как из списков, можно извлекать отдельные символы с помощью индексов или подстроки с помощью взятия срезов. В языке Python есть множество встроенных строковых методов, позволяющих упростить обработку строк.

  21. Кортежи - неизменяемые структуры данных

    Кортежи в Python - это неизменяемые структуры данных, состоящие из элементов одного или разных типов. Кортежи подобны спискам и обычно используются для защиты последних от изменений. Преобразование одного в другой выполняется с помощью встроенных функций tuple() и list().

  22. Словари в Python - работа с ключами и значениями

    Словарь в Python - это изменяемая неупорядоченная структура данных, элементами которой являются пары "ключ:значение". В словари можно добавлять и удалять элементы, изменять значения ключей. В Python словари имеют ряд методов, упрощающих работу с ними.

  23. Работа с файлами в Python

    В языке программирования Python открытие файлов выполняется с помощью функции open(), которой передается два аргумента - имя файла и режим. Файл может быть открыт в режиме чтения, записи, добавления. Также может быть указан тип файла - текстовый или бинарный. Для файлов есть ряд встроенных методов чтения, записи и др.