Вероятно, вы уже знакомы с оператором if и конструкциями if-else и if-elif-else. Теперь пришел черед для изучения циклов (loops). В статье рассмотрим простейшие конструкции с циклами for и while, инструкции для их прерывания и продолжения (break и continue соответственно), а также приведем примеры использования операторов if-elif-else для создания дополнительных условий.
Циклические задачи — неотъемлемая часть нашей жизни. Типичный пример: покупка продуктов по списку. Мы смотрим в список, ищем нужный продукт и кладем его в корзину, затем переходим ко второму пункту и повторяем ту же самую операцию до конца списка, после чего (выходим из программы) выбрасываем список и переходим к следующей (части кода) задаче. После выполнения последнего пункта список выбрасывается. Примерно так же работают циклы и в программировании: программа продолжит выполнять определенный кусок кода до тех пор, пока соблюдается какое-то условие, заданное для этого куска или, как говорят программисты, тела цикла.
Условия задаются при помощи специальных операторов (while или for, конструкции с которыми мы и рассмотрим), а однократное выполнение тела цикла называется итерацией. Итераций может быть сколько угодно, и они будут выполняться до тех пор, пока условие истинно. Если допустить логическую ошибку при написании кода, то итерации рискуют стать бесконечными. В таких случаях говорят о бесконечном цикле, который, впрочем, можно вызывать и намеренно.
Оператор for в циклическом программировании нужен для перебора известного количества значений в списке. For — один из главных помощников программиста Python, он позволит сэкономить кучу времени благодаря тому, что вам не придется много раз перепечатывать однотипный код. Но довольно теории, давайте напишем код, чтобы было понятнее, что делает for:
word = "timeweb"
for letter in word:
print (letter)
Получаем такой результат:
t
i
m
e
w
e
b
То есть программа перебирает все элементы, в данном случае символы, составляющие строку, и выдает их в виде последовательности. Но это могут быть и элементы списка (список создается при помощи символов [ ], а его элементы перечисляются через запятую. Давайте для примера возьмем тот самый список продуктов и выведем его на экран:
products = ['молоко', 'хлеб', 'яйца', 'колбаса', 'сахар', 'мука']
for element in products:
print (element)
молоко
хлеб
яйца
колбаса
сахар
мука
Теперь несколько замечаний для новичков по приведенным выше примерам кода:
Функция оператора while иная, и проще всего ее понять, переведя слово while на русский: «до тех пор, пока». Это значит, что до тех пор, пока условие, вводимое while, истинное, тело цикла продолжит выполняться, при этом количество итераций заранее не известно (в отличие от циклов с оператором for). Пример:
number = 1
while number < 10:
print (number)
number += 2
print ('Следующее значение больше 10, поэтому счет прервался.')
Вот результат выполнения кода:
1
3
5
7
9
Следующее значение больше 10, поэтому счет прервался.
Одна из особенностей Python в том, что этот язык максимально наглядный, и какую работу выполняет код, часто понятно без подробных пояснений. В данном случае код можно расшифровать так: мы присвоили переменной number значение 1 и создали условие — до тех пор пока значение меньше 10, тело цикла будет выполняться. В теле создали две инструкции, одну видимую (выводить на экран очередное значение), а другая прибавляет к значению переменной указанное число и перезаписывает это значение. Для наглядности можно было бы переписать эту строку так:
number = number + 2
Записи x = x + 2 и x += 2 равнозначны (Python в некоторых случаях допускает использовать разный код для выполнения одних и тех же действий).
Как только условие, введенное оператором while, перестает быть истинным (number становится больше 10), тело цикла перестает выполняться, и программа переходит к заключительной строке (заметьте, что она расположена на другом уровне, поэтому не имеет отступа), а на экран выводится сообщение:
Следующее значение больше 10, поэтому счет прервался.
Теперь рассмотрим более сложные и функциональные примеры конструкций с while, которые создаются с использованием операторов if, elif и else. Чтобы лучше понимать код с ними, удобно переводить их так:
Приведем наглядный пример:
x = 0
while x < 10:
if x == 0:
print (x, "Выполняется условие оператора if")
x += 1
elif x <= 5:
print (x, "Выполняется условие первого оператора elif")
x += 1
elif x > 5 and x < 9:
print (x, "Выполняется условие второго оператора elif")
x += 1
else:
print (x, "Выполняется условие оператора else")
x += 1
print ("Вот и посчитали.")
Вот что получилось:
0 Выполняется условие оператора if
1 Выполняется условие первого оператора elif
…
6 Выполняется условие второго оператора elif
…
9 Выполняется условие оператора else
Вот и посчитали.
Разбираем. После присвоения переменной x значения 0 создаем условие для цикла while, а с помощью операторов if, elif и else добавляем набор условий, при которых на экран будет выводиться определенный текст. Условие if срабатывает тогда, когда значение x равно нулю, первый elif — при x меньше или равно пяти. В случае со вторым elif мы также использовали оператор and, добавляющий дополнительное условие, чтобы пользователь увидел и текст, который выводится при выполнении условия else. Python проверяет истинность условий последовательно, поэтому, если какое-то условие выше по списку будет оставаться истинным до последней итерации, инструкции тех условий, которые расположены ниже, выполняться не будут.
Инструкции break и continue дают дополнительные возможности для работы с циклами. Вот что они делают:
Для примера работы инструкции break давайте слегка изменим код из предыдущей части и попробуем выполнить его:
x = 0
while x < 10:
if x == 0:
print (x, "Выполняется условие оператора if")
x += 1
elif x <= 5:
print (x, "Выполняется условие первого оператора elif")
x += 1
elif x > 5 and x < 9:
print (x, "Выполняется условие второго оператора elif")
x += 1
else:
print (x, "Выполняется условие оператора else")
print ("Вот и посчитали.")
Мы убрали строку с инструкцией x += 1 после оператора условия else и попали в бесконечный цикл! Конечно, можно просто вернуть ее, но можно сделать и так:
x = 0
while x < 10:
…
else:
print (x, "Выполняется условие оператора else")
break
print ("Вот и посчитали.")
Теперь после добавления команды break при выполнении условия else цикл перестанет быть бесконечным, и на экране появится последнее сообщение (Вот и посчитали).
А вот пример, как работает инструкция continue:
products = ['молоко', 'хлеб', 'яйца', 'колбаса', 'сахар', 'мука']
print ('Нужно купить:')
print ()
for element in products:
if element == 'колбаса':
continue
print (element)
print ()
print ('А колбасу мы уже купили.')
Результат работы программы:
Нужно купить:
молоко
хлеб
яйца
сахар
мука
А колбасу мы уже купили.
Как видим, колбасы в списке уже нет: как только программа доходит до нее, в дело вступает команда continue, предписывающая игнорировать этот пункт. Но цикл при этом не прерывается, поэтому остальные продукты из списка тоже выводятся на экран.
Также с помощью операторов циклов можно создавать вложенные циклы в Python 3. Пример:
for i in range (1, 4):
for j in range (1, 4):
print (i * j, end=" ")
print ()
Результат работы программы:
1 2 3
2 4 6
3 6 9
Вы уже наверняка догадались, что таким образом достигается последовательное перемножение чисел (за это отвечает инструкция i * j в инструкции для вложенного цикла for, а код end=" " выводит полученные значения с пробелами). Нижняя инструкция с функцией print (), относящаяся к основному циклу for (это реализовано с помощью отступов), тоже нужна для наглядности: в этом случае программа выведет полученные значения в столбик.
Также у новичков может возникнуть вопрос, почему в выводе нет строки 4 8 12? Это особенность встроенной функции range, задающей диапазон значений: последнее число она не включает, поэтому, чтобы указанная выше строчка появилась, код должен быть написан так:
for i in range (1, 5):
for j in range (1, 4):
print (i * j, end=" ")
print ()
1 2 3
2 4 6
3 6 9
4 8 12
Итак, в этом небольшом уроке мы познакомились с циклами for и while, узнали, как использовать вместе с ними условные конструкции if-elif-else, а также применять инструкции break и continue. Немного практики, и вы сможете писать более сложный код, чем был представлен в наших примерах. Удачи!
Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.