Найти тему
Журнал разработчика

Запись 9. Циклы

Цикл – это повторение. Повторение одних и тех же действий. В Python имеются специальные операторы, отвечающие за повторения.

Сразу к примерам. Возьмём уже знакомый нам список студентов из темы Списки.

Допустим нам надо вывести этот список. Причём каждая фамилия должна быть на новой строке и с заглавной буквы (вспоминаем метод title()). Решить данную задачу можно вручную:

Ручная работа, не для этого мы учимся программировать
Ручная работа, не для этого мы учимся программировать

Так конечно можно. Но что делать если в списке гораздо больше элементов. Получится огромный код и куча рутинной работы. Так что доверим это дело циклу for.

Так гораздо лучше, оператор print использован лишь раз
Так гораздо лучше, оператор print использован лишь раз
Результат будет одинаков в обоих случаях
Результат будет одинаков в обоих случаях

Теперь разберём что же тут написано.

-5

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

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

А пока посмотрим на весь код целиком. И допишем в конце ещё одну строчку.

-6

И на результат

-7

Цикл автоматически перебрал все элементы списка students, применил к ним метод title() и вывел на экран. Отличная работа, цикл!

Обратите внимание на то, что последняя строка не имеет отступа в 4 пробела. Это потому, что она не должна входить в тело цикла.

Что ещё надо знать. Каждое выполнение тела цикла называется итерацией. В данном примере 3 итерации, т.е. 3 повторения.

А теперь рассмотрим ещё один вариант применения цикла for.

Допустим, надо получить и обработать некий диапазон чисел. Например, получить сумму чисел от 1 до 10.

Для начала научимся просто генерировать эти числа. Используем функцию range() – диапазон.

-8
Что-то здесь не так... 0 нам не нужен, а 10 надо бы
Что-то здесь не так... 0 нам не нужен, а 10 надо бы

Всё дело в том, что диапазон считается начиная с 0 и выдаёт заданное количество значений. В нашем случае десять значений 0-9. Для того чтобы получить необходимый диапазон, укажем его более явно.

Теперь в функцию range() мы передаём 2 аргумента: начало и конец диапазона, причём само конечное значение в диапазон не входит
Теперь в функцию range() мы передаём 2 аргумента: начало и конец диапазона, причём само конечное значение в диапазон не входит
Так гораздо лучше
Так гораздо лучше

Ещё раз обращаю внимание на то, что функция range(a, b) возвращает значения от a до b-1.

Можно использовать и отрицательные числа, главное чтобы соблюдалось условие a<b.

-12
-13

Если же есть необходимость вывести значения в обратном порядке, то воспользуемся функцией reversed().

Поместили range() в атрибут reversed()
Поместили range() в атрибут reversed()
Обратный порядок... легко!
Обратный порядок... легко!

Но вернёмся к нашей задаче, подсчитать сумму чисел от 1 до 10. Как получать числа мы уже знаем, осталось суммировать.

-16

Переменная amount хранит ту самую сумму, но изначально мы присваиваем ей значение 0.

Запись вида:

-17

соответствует записи

-18

На этом пока всё, если что не понятно, спрашивайте в комментариях.