Синтаксис и возможности цикла for Python

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

Применение циклов

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

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

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

Синтаксис цикла For

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

Цикл for в Python отличается от других языков программирования тем, что перебирает значения итерируемых объектов (тех,которые содержат несколько элементов). В других же языках этот цикл выполняет роль счетчика, определяя количество прохождений цикла (если упрощенно, не углубляясь в детали). То есть, при первом прохождении списка переменной присваивается значение 1, при втором – 2, и так далее. Или же в других языках программирования можно сделать так, чтобы при каждой итерации цикла значение переменной увеличивалось на единицу.

Цикл for в Python перебирает составляющие таких элементов, как list, tuple, переменным строчного типа, ключам словаря и так далее. 

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

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

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

for <переменная> in <последовательность>:

    <действие>

else:

    <действие>

Обратите внимание на отступы. В Python они обозначают начало и конец инструкции списка. Их надо указывать обязательно. В других языках роль отступов выполняют инструкции start и end, но это, как минимум, неудобно. Преимущество Python в том, что нет необходимости писать лишние команды.

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

Давайте приведем пример. 

>>> languages = ["C", "C++", "Perl", "Python"]

>>> for x in languages:

...     print(x)

...

C

C++

Perl

Python

>>>

А какое же значение блока else? Семантически он аналогично циклу while. Выполнение этого блока будет осуществляться лишь при условии, что цикл не был принудительно остановлен оператором break. То есть, он выполняется после того, как заканчиваются элементы последовательности. 

Оператор прерывания

Поговорим более подробно о том, что делает оператор break в Python. Он используется, если в программе цикл for должен прерваться. В этом случае инструкции else выполняться не будут.

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

edibles = ["отбивные", "пельмени", "яйца", "орехи"]




for food in edibles:

    if food == "пельмени":

        print("Я не ем пельмени!")

        break

    print("Отлично, вкусные " + food)

else:

    print("Хорошо, что не было пельменей!")

print("Ужин окончен.")

Здесь текст отличается в зависимости от того, есть ли пельмени в списке еды. О завершении цикла свидетельствует текст «Хорошо, что не было пельменей».

Если нет возможности выполнить этот код и посмотреть самостоятельно, как он работает, вот пример вывода, если есть пельмени в списке. 

Отлично, вкусные отбивные

Я не ем пельмени!

Ужин окончен.

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

Отлично, вкусные отбивные

Отлично, вкусные яйца

Отлично, вкусные орехи

Хорошо, что не было пельменей!

Ужин окончен.

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

Оператор пропуска Continue

Бывают ситуации, когда определенные элементы списка или другого итерируемого объекта не нужны нам в цикле. Это может быть любая ситуация Например, если нам надо написать только удачные марки машин, за исключением одной или нескольких неудачных. Что делать, если такая ситуация происходит?

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

edibles = ["отбивные", "пельмени", "яйца", "орехи"]




for food in edibles:

    if food == "пельмени":

        print("Я не ем пельмени!")

        continue

    print("Отлично, вкусные " + food)

else:

    print("Ненавижу пельмени!")

print("Ужин окончен.")

После выполнения этого кода появится такой вывод. 

Отлично, вкусные отбивные

Я не ем пельмени!

Отлично, вкусные яйца

Отлично, вкусные орехи

Ненавижу пельмени!

Ужин окончен.

Работает этот алгоритм следующим образом:

  1. Программа перебирает составляющие список объекты, и на каждой итерации проверяет, не попались ли в переменной food пельмени.
  2. Если обнаруживается, что не пельмени, то пишется «Отлично, вкусные (название еды)».
  3. Если оказывается, что под рукой у интерпретатора оказались пельмени, то сам этот элемент пропускается (не пишется, что они вкусные), но при этом выдается другой текст – «Я не ем пельмени».

После этого программа записывает «Ненавижу пельмени» и сигнализирует об окончании ужина.

Использование функции range()

Если вы желаете получить доступ к отдельным составляющим списка, то не сразу может стать понятно, как применять цикл for. Ведь в чистом виде мы с его помощью получим доступ ко всем элементам, но сам индекс недоступен. Но можно получить доступ не только к самому элементу, но и его индексу. Для этого используется комбинация функций range() и len().  

fibonacci = [0,1,1,2,3,5,8,13,21]




for i in range(len(fibonacci)):

    print(i,fibonacci[i])

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

Внимание! Если использовать функцию len() по отношению к list или tuple, то вы узнаете количество элементов, которые входят в эту последовательность.

Какие нюансы нужно учитывать?

При переборе списка необходимо избегать изменения списка в теле цикла. Если это случится, то будут не очень хорошие результаты. Какие именно? Посмотрите на этот пример, и станет немного понятнее.  

colours = ["красный"]




for i in colours:

    if i == "красный":

        colours += ["черный"]

    if i == "черный":

        colours += ["белый"]

print(colours)

Если выполнить этот код, в консоли будет напечатан следующий список. 

['красный', 'черный', 'белый']

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

colours = ["красный"]




for i in colours[:]:

    if i == "красный":

        colours += ["черный"]

    if i == "черный":

        colours += ["белый"]

print(colours)

В результате, вывод будет следующим. 

['красный', 'черный']

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

Enumerate в Python 3

Enumerate – это еще одна функция, которая может работать с циклом for. Но про нее не знают даже многие опытные разработчики. С ее помощью можно считать итерации цикла. То есть, ее можно использовать вместо последовательности натуральных чисел, что гораздо удобнее и не загромождает код.

Подсчет итераций осуществляется автоматически.

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

for counter, value in enumerate(some_list):

    print(counter, value)

Эта функция также может использовать необязательный аргумент, который пишется после первого через запятую. По умолчанию это цифра 0. Означает она цифру, с которой начинается подсчет итераций списка. Как в этом примере. 

my_list = ['яблоко', 'банан', 'вишня', 'персик']




for c, value in enumerate(my_list, 1):

    print(c, value)




# Результат:

# 1 яблоко

# 2 банан

# 3 вишня

# 4 персик

Таким образом, мы разобрались, как использовать цикл for в Python 3 версии, а также разобрали наглядные примеры их применения. Видим, что все довольно просто. 

А теперь домашнее задание. Попробуйте написать программу, которая бы оценивала товары в последовательности в зависимости от категории. Например, создайте список со значениями «айфон, китайский айфон, андроид» и чтобы программа, перебирая эти значения, выдала оценки «Многие считают айфон хорошим устройством», «Китайскими айфонами лучше не пользоваться», «Многие считают устройства под управлением Андроид хорошими устройствами».

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

ОфисГуру
Adblock
detector