После прочтения этой статьи у вас не будет шансов, что Loops когда-нибудь бросит вас на Loop.

Компьютеры отлично справляются с повторяющимися задачами снова и снова, поскольку они никогда не «скучают» и не делают ошибок. Простой расчет, запрашиваемый компьютером, может быть выполнен один или тысячу раз, и первый результат будет таким же точным, как и последний. Этого люди не могут гарантировать.

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

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

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

В Python циклы можно реализовать тремя способами:

  • Циклы «Пока»
  • Циклы «For»
  • Рекурсия

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

Оглавление:

1. Циклы пока (чтение 4 мин.)

2. Циклы (чтение 4 мин.)

3. Рекурсия (чтение 3 мин.)

1. Циклы пока

Этот метод дает компьютеру команду непрерывно выполнять код в зависимости от значения условия. Он начинается с ключевого слова while, за которым следует сравнение для оценки, а затем двоеточие. На следующей строке с отступом вправо находится блок кода, который должен быть выполнен. Подобно оператору if, код в теле будет выполняться только в том случае, если сравнение оценивается как истинное.

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

Взгляните на следующий пример:

Давайте рассмотрим каждую строку кода внутри этого цикла:

  1. В первой строке мы присваиваем значение 0 переменной «i», названной в честь слова «итерация». Это действие называется «инициализацией», чтобы присвоить переменной начальное значение.
  2. В строке после этого мы запускаем цикл while. Мы устанавливаем условие для этого цикла, что «i» должно быть меньше 5. Сейчас «i» равно 0, так как он только что инициализирован, так что это состояние в настоящее время верно.
  3. В следующих двух строках у нас есть блок с отступом вправо. Здесь мы можем использовать общую для функций Python характеристику, которая указывает, что каждая строка кода, которая имеет одинаковое количество отступов, будет частью тела функции или цикла в этом случае.
  4. В теле цикла две строчки. В первой строке мы печатаем сообщение, за которым следует текущая итерация, представленная значением «i». Во второй строке увеличивается значение «i». Мы делаем это, добавляя 1 к его текущему значению и возвращая его «i». Таким образом, после первого выполнения тела цикла «i» будет равно 1 вместо 0.

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

И поскольку 1 здесь все еще меньше 5, он снова выполняет тело цикла. Компьютер будет делать это до тех пор, пока условие не перестанет выполняться. В этом примере условие будет ложным, если «i» больше не меньше 5. Как только условие станет ложным, цикл завершится, и будет выполнена следующая строка кода.

Как избежать ловушки бесконечного цикла

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

В качестве примера возьмем следующий код. Как и в предыдущем случае, мы инициализировали переменную «i», но забыли добавить индекс внутри цикла для обновления переменной на каждой итерации. Как следствие, цикл будет выполняться до тех пор, пока мы не прервем его вручную с помощью команд CTRL + C:

Чтобы избежать этой проблемы, рекомендуется уделить время тому, чтобы рассмотреть различные значения, которые может принимать переменная. Это поможет вам убедиться, что цикл не застрянет во время итерации.

Следует ли всегда избегать бесконечных циклов?

Хотя вам нужно остерегаться бесконечных циклов, это не всегда плохо.

Иногда вы действительно хотите, чтобы ваша программа выполнялась непрерывно, пока не будет выполнено какое-либо внешнее условие.

Если вы использовали утилиту ping в системе Linux или macOS или ping-t в системе Windows, вы видели бесконечный цикл в действии. Этот инструмент будет продолжать отправлять пакеты и печатать результаты на терминал, если вы не отправите ему сигнал прерывания, обычно нажимая Ctrl + C.

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

Как вы можете видеть, указанная процедура заключалась в добавлении 1 к переменной «i» для каждой итерации, пока она не достигнет значения 10, когда процесс должен прерваться. Логика кода будет примерно такой:

2. Для петель

Цикл for выполняет итерацию по последовательности значений. Очень простой пример цикла for - перебор последовательности чисел, например от 0 до 4.

Обратите внимание, что структура похожа на структуру циклов while. Первая строка указывает отличительное ключевое слово for и заканчивается двоеточием. Тело цикла смещено вправо, как в цикле while, блоке if и определениях функций. В данном случае отличие состоит в том, что у нас есть ключевое слово в.

Кроме того, между ключевыми словами for и in у нас есть имя переменной, в данном случае «i» для «индекса». Эта переменная будет принимать каждое из значений в последовательности, по которой проходит цикл. Итак, в этом примере он будет перебирать последовательность чисел, сгенерированную с помощью функции range ().

Напоминаем, что в Python и многих других языках программирования диапазон чисел по умолчанию начинается со значения 0. Кроме того, список сгенерированных чисел будет на единицу меньше заданного значения. В простом примере здесь «i» будет принимать значения 0, 1, 2, 3 и 4.

На этом этапе статьи вам может быть интересно: почему два цикла выглядят так, как будто они делают одно и то же?

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

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

В этом примере мы определяем список значений. После этого мы инициализируем две переменные, some и length, которые будут обновлены в теле цикла for. В цикле for мы перебираем каждое из значений в списке, добавляя текущее значение к сумме значений, а затем также добавляя 1 к длине, которая вычисляет количество элементов. в списке. После того, как мы просмотрели весь список, мы распечатываем сумму и среднее значение.

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

Как определить, какой цикл использовать?

Если вам интересно, когда следует использовать циклы for, а когда - while l ой, есть способ сказать:

  • Используйте циклы for, когда есть последовательность элементов, которые вы хотите перебрать.
  • Используйте циклы while, если вы хотите повторять действие, пока условие не изменится.

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

Повышайте уровень своих навыков создания петель: вложенные петли

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

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

Как видите, вложенные циклы очень полезны для решения определенных задач, таких как сортировка игроков в турнире.

Распространенные ошибки с петлями

  1. Итерация по непоследовательностям. Как я уже упоминал, циклы for выполняют итерацию по последовательностям. Следовательно, интерпретатор Python будет отказываться от перебора отдельных элементов, таких как целые числа или не повторяющиеся объекты.
  2. Ошибка инициализации переменных. Убедитесь, что все переменные, используемые в условии цикла, инициализированы перед циклом.
  3. Непреднамеренные бесконечные циклы. Убедитесь, что тело цикла изменяет переменные, используемые в условии, чтобы цикл в конечном итоге завершился для всех возможных значений переменных.
  4. Забываем, что не включен верхний предел диапазона ().

В качестве практического примера первого сценария давайте попробуем повторить целое число:

В зависимости от того, что мы пытаемся сделать, есть два решения этой проблемы:

  • Если вы хотите перейти от нуля к 25, мы используем функцию range.
  • Если вы пытаетесь перебрать список, в котором единственным элементом является 25, тогда это должен быть список.

3. Рекурсия

Рекурсия - это третий механизм в Python для перебора последовательности значений в дополнение к циклам while и for.

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

Рекурсия - это повторное применение одной и той же процедуры к меньшей проблеме.

Прекрасным наглядным примером этих приемов являются русские матрешки:

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

Представьте, что мы хотим узнать, сколько всего кукол, нам нужно перебрать каждую куклу, пока мы не дойдем до последней, а затем подсчитать, сколько кукол мы открыли. Это рекурсия в действии.

В программировании рекурсия - это способ выполнения повторяющейся задачи с помощью самого вызова функции. Рекурсивная функция обычно вызывает себя с измененным параметром, пока не достигнет определенного условия. Это состояние называется базовым случаем.

В примере с русскими куклами самая маленькая кукла будет базовым случаем. Давайте попробуем реальную задачу, в которой мы попытаемся закодировать функцию, которая вычисляет факториал числа. В математике факториал положительного целого числа n, обозначаемый n!, является произведением всех положительных целых чисел, меньших или равных n :

Как вы можете видеть в приведенном выше коде, функция factorial () вызывает себя, чтобы вычислить факториалы для чисел больше 1. Каждый раз, когда функция выполняется, она вызывает себя с меньшим числом, пока не будет достигает базового случая. Когда он достигает базового случая, он возвращает значение 1. Этот цикл будет продолжаться до тех пор, пока первая функция factorial () не вернет желаемый результат.

Вам может быть интересно, зачем нам рекурсивные функции, если я могу просто использовать цикл for или while?

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

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

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

Заключение

В этой статье я объяснил, как заставить компьютер повторять действие. Python предоставляет нам три различных способа выполнения повторяющихся задач: while циклы, for циклы и рекурсия.

Циклы For лучше всего подходят, когда вы хотите перебрать известную последовательность элементов, но когда вы хотите работать, пока выполняется определенное условие, циклы while - лучший выбор.

Если вам понравилась информация, включенная в эту статью, не стесняйтесь обращаться ко мне, чтобы поделиться своими мыслями. Это мотивирует меня продолжать делиться!

Связанные статьи для получения дополнительной информации о программировании на Python:

Создание симулятора цен на акции:



Узнайте, как кодировать потрясающие визуализации на Python:



Анализ данных Нью-Йорка с помощью Python:



Спасибо, что нашли время прочитать мою статью! Если у вас есть какие-либо вопросы или идеи, которыми вы хотите поделиться, напишите мне на мою электронную почту, или вы можете найти меня в следующих социальных сетях для получения дополнительной информации по теме: