Ускоренный курс Python 10 минут в день

Изучение Python 10 минут в день # 8

Цикл в Python: некоторое время

Это серия коротких 10-минутных статей о Python, которые помогут вам улучшить свои знания о Python. Я стараюсь публиковать статью каждый день (никаких обещаний), начиная с самых основ, заканчивая более сложными идиомами. Не стесняйтесь обращаться ко мне в LinkedIn с вопросами или запросами по конкретным темам Python, о которых вы хотите знать.

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

И цикл for, и цикл while имеют разные варианты использования. Цикл for, как и в предыдущем примере, используется для перебора чего-либо. Это может быть простой счетчик (список значений), список строк, фактически любой объект, который помещается в итерацию. Таким образом, циклы for должны проходить через фиксированный список. Цикл while имеет другое назначение, поскольку он не выполняет итерацию по списку, но имеет условное выражение, которое проверяется перед каждой итерацией. Если условие истинно, он выполнит блок кода, а если условное условие равно False, цикл while будет завершен. Цикл while используется для продолжения итерации, например, до тех пор, пока пользователь не нажмет клавишу или не будет достигнута определенная точность для процесса минимизации.

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

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

Python уже содержит довольно много удобных инструментов для работы со списками. Например, чтобы перевернуть список, вы можете использовать встроенный метод reversed (). Эти типы методов принимают итерацию (например, список) и возвращают новую итерацию с примененной манипуляцией. Некоторые из этих методов, такие как reversed (), также встроены в сам класс списка (my_list.reverse ()). Однако разница в том, что эти методы изменяют сам список (поскольку списки изменяемы) и не возвращают новый список.

Иногда при итерации вам нужно иметь счетчик или индекс. Для этого особого случая в Python есть enumerate, которая «скрепляет» ваш список последовательно увеличивающимися числами. Zip может объединить несколько списков в одну итерацию, которую можно распаковать в цикле. Конечно, все списки должны быть одинаковой длины, иначе вы получите ошибку.

Метод range () используется для создания списка чисел. Он принимает одно или два граничных значения и шаг. Range () возвращает особый тип итерируемого объекта, которым является объект диапазона (это не генератор). В наших предыдущих примерах мы предоставили список для цикла. Этот список полностью определен где-то в памяти и ожидает обращения цикла for. Если бы мы сделали то же самое с большим диапазоном чисел, нам сначала нужно создать этот список. Это может занять большой объем памяти, особенно когда мы перебираем миллионы значений (range (1e12)). Для таких случаев в Python есть генераторы, которые представляют собой форму ленивого выполнения. Только когда значение требуется, т.е. когда цикл for запрашивает его, оно генерируется. Хотя диапазон имеет некоторые тонкие отличия от генераторов, идея в чем-то схожа: получайте нужное значение только тогда, когда оно вам нужно, без предварительного создания полного списка чисел.

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

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

Я никогда не использовал конструкцию for-else или while-else, но у нее могут быть некоторые варианты использования. Однако это довольно легко понять. Если цикл for или while был успешным, то есть без разрывов или ошибок, выполняется блок кода, определенный после else.

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

Конструкция, которую вы обычно видите на Python-серверах restFul API, представляет собой бесконечный цикл while. Эти циклы продолжают работать вечно (или до тех пор, пока пользователь не прервет программу (или не возникнет ошибка)), потому что предоставленным условием является константа True. Истина, никогда не изменяется на Ложь, так как это наиболее истинное значение Истины, а пока может быть остановлено только ключевым словом break или божественным вмешательством. Условное выражение в цикле while аналогично условию в операторе if. Следовательно, вы можете объединить несколько, используя логические операторы (and, not или). Кроме того, если вы хотите закодировать цикл позже, вы можете использовать заполнитель pass.

Практика на сегодня:

a. В новом блокноте и создайте цикл for для перебора всех значений от 1 до 100 (включая 100) и суммирования всех значений. (должно быть 5050)

b. Просмотрите следующий список:

my_list = ['Alfred', 'Dennis', 'Rob', 'Coen', 'Coen', 'Alfred', 'Jeroen', 'Hendri', 'Alfred', 'Coen', 'Rob', 'Dennis', 'Rob', 'Dennis', 'Rob', 'Coen', 'Rob', 'Alfred', 'Jeroen', 'Hendri', 'Alfred', 'stop', 'Coen', 'Rob', 'Dennis', 'Dennis', 'Rob', 'Jeroen', 'Jeroen', 'Alfred', 'Jeroen', 'Hendri', 'Alfred', 'Coen', 'Rob', 'Dennis']

a) подсчитать все имена
b) подсчитать все имена, но пропустить 'Dennis' с помощью ключевого слова continue
c) подсчитать все имена, но остановиться на 'stop' с помощью break ключевое слово

c. Используйте цикл while для создания суммы всех значений, т. е. 1 + 2 + 3 +… + n, где n увеличивается на 1 для каждого шага. Продолжайте, пока сумма не превысит 10000, и верните текущий шаг n. Распечатайте значение с помощью конструкции else после завершения цикла while. (должно быть 142)

Если у вас возникнут вопросы, свяжитесь со мной через LinkedIn.