Циклы for и while, операторы break и continue, волшебное слово else
В этой статье я расскажу о циклах for и while, операторах break и continue, а также о слове else, которое, будучи употребленное с циклом, может сделать программный код несколько более понятным.
Цикл while
While — один из самых универсальных циклов в Python, поэтому довольно медленный. Выполняет тело цикла до тех пор, пока условие цикла истинно.
Цикл for уже чуточку сложнее, чуть менее универсальный, но выполняется гораздо быстрее цикла while. Этот цикл проходится по любому итерируемому объекту (например строке или списку), и во время каждого прохода выполняет тело цикла.
Оператор continue
Оператор continue начинает следующий проход цикла, минуя оставшееся тело цикла (for или while)
Оператор break
Оператор break досрочно прерывает цикл.
Слово else, примененное в цикле for или while, проверяет, был ли произведен выход из цикла инструкцией break, или же «естественным» образом. Блок инструкций внутри else выполнится только в том случае, если выход из цикла произошел без помощи break.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Циклы в Python: как работать с while и for
При написании программ часто возникают ситуации, когда нужно снова и снова использовать определенный фрагмент кода. Циклы в Python упрощают работу программиста: они помогают многократно выполнять блок кода.
Професійний курс від skvot: PR basis.
Засвоєте основи PR та комунікації.
Если вкратце: циклы нужны для того, чтобы пользоваться созданным элементом, но при этом не писать одну и ту же строку кода несколько раз.
Основные типы циклов
В языке Python существуют 2 основных цикла: while и for. Рассмотрим подробно работу каждого из них.
Цикл while
Цикл while — один из самых распространенных в Python. Он позволяет воспроизводить элемент кода снова и снова, пока заданное условие остается верным (true). Чтобы цикл правильно работал, нужен фрагмент кода, который вы хотите использовать повторно, условие true или false и ключевое слово while .
Главное отличие цикла while от for состоит в том, что while может повторять код бесконечное количество раз, пока выполняется условие его применения.
Творчий курс від skvot: 3D-художник персонажів.
Створюйте світ персонажів.
# Take user input number = 2 # Condition of the while loop while number < 5 : # Find the mod of 2 if number%2 == 0: print("The number "+str(number)+" is even") else: print("The number "+str(number)+" is odd") # Increment `number` by 1 number = number+1
The number 2 is even The number 3 is odd The number 4 is even
Освоить язык программирования Python вам могут помочь онлайн курсы от наших партнеров Mate Academy и Powercode. Получите качественный уровень знаний от практикующих специалистов.
Цикл for
Цикл for выполняет ту же функцию, что и while — повторяет указанные строки кода. Но в отличие от while, для работы for не требуется никаких условий. For используется для перебора последовательности, например, списка, и работает строго определенное количество раз.
Так выглядит код с использованием цикла for :
languages = ['R', 'Python', 'Scala', 'Java', 'Julia'] for index in range(len(languages)): print('Current language:', languages[index])
Current language: R Current language: Python Current language: Scala Current language: Java Current language: Julia
Функция range
Функция range используется при работе со строками цикла for, а также для создания последовательностей чисел. Рассмотрим на примере кода, как эта функция работает с целыми числами:
for number in range(5,10,2) : print("I am number : "+str(number))
I am number : 5 I am number : 7 I am number : 9
Для работы функции range указываются 2 или 3 числа:
Освітній курс від mate.academy: UI/UX Design.
Творчий розвиток навичок дизайну.
- Первое число — start — с него функция начинает отсчет.
- Второе число называется stop и обозначает конец выбранного промежутка чисел. В примере это цифра 10, поэтому функция не может показать число больше 10.
- Третье число называется step : это шаг, который делает функция при переборе чисел. Можно не указывать шаг, и тогда в нашем примере функция покажет все числа от 5 до 10.
Заданный пример начинается с 5, к этому числу прибавляется по 2, пока мы не упремся в потолок функции. Так, получается следующая последовательность чисел:
Range также можно использовать с отрицательными числами и выполнять вычитание. Например:
for i in range(10, -5, -2): print(i)
10 8 6 4 2 0 -2 -4
Вложенные циклы
Циклы while и for можно как использовать по отдельности, так и комбинировать. Можно вложить цикл for внутрь внешнего цикла while и наоборот, а также вкладывать циклы одного вида друг в друга.
Освітній курс від mate.academy: UI/UX Design.
Творчий розвиток навичок дизайну.
Вложенные циклы работают по следующей схеме: программа сначала сталкивается с внешним циклом и начинает выполнять его условия. Затем запускается внутренний вложенный цикл, который выполняется до своего завершения. Программа будет завершать внутренний цикл и возвращаться к началу внешнего до тех пор, пока последовательность не будет завершена или другой оператор не нарушит этот процесс.
Вложенный цикл for
Рассмотрим на примере вложенного цикла for , как это работает на практике:
num_list = [1, 2, 3] alpha_list = ['a', 'b', 'c'] for number in num_list: print(number) for letter in alpha_list: print(letter)
1 a b c 2 a b c 3 a b c
По результату выполнения кода видно, что программа завершает первую итерацию внешнего цикла на цифре 1 и затем запускает завершение внутреннего цикла, печатая a, b, c. Как только внутренний цикл завершен, программа возвращается к началу внешнего цикла и печатает цифру 2, а после снова воспроизводит вложенный цикл.
Вложенный цикл while
Вложенный цикл while выглядит так:
i=1 while i1 Outer loop is executed only once 1 Inner loop is executed until to completion 2 Inner loop is executed until to completion 3 Inner loop is executed until to completion 2 Outer loop is executed only once 1 Inner loop is executed until to completion 2 Inner loop is executed until to completion 3 Inner loop is executed until to completion 3 Outer loop is executed only once 1 Inner loop is executed until to completion 2 Inner loop is executed until to completion 3 Inner loop is executed until to completionВыход из цикла
Если вам нужно пропустить какую-то часть цикла, то прервать его выполнение можно с помощью двух операторов: break или continue .
Break позволяет выйти из вложенного цикла сразу во внешний:
for number in range(3) : print("-------------------------------------------") print("I am outer loop iteration "+str(number)) for another_number in range(3): print("****************************") print("I am inner loop iteration "+str(another_number)) break------------------------------------------- I am outer loop iteration 0 **************************** I am inner loop iteration 0 ------------------------------------------- I am outer loop iteration 1 **************************** I am inner loop iteration 0 ------------------------------------------- I am outer loop iteration 2 **************************** I am inner loop iteration 0Если не использовать оператор break в этой части кода, то результат бы выглядел вот так:
------------------------------------------- I am outer loop iteration 0 **************************** I am inner loop iteration 0 **************************** I am inner loop iteration 1 **************************** I am inner loop iteration 2 ------------------------------------------- I am outer loop iteration 1 **************************** I am inner loop iteration 0 **************************** I am inner loop iteration 1 **************************** I am inner loop iteration 2 ------------------------------------------- I am outer loop iteration 2 **************************** I am inner loop iteration 0 **************************** I am inner loop iteration 1 **************************** I am inner loop iteration 2Оператор continue позволяет вернуться ко внешнему циклу, полностью пропуская вложенный цикл. В коде continue ставится в конце внешнего цикла:
for number in range(3) : print("-------------------------------------------") print("I am outer loop iteration "+str(number)) continue for another_number in range(3): print("****************************") print("I am inner loop iteration "+str(another_number)) breakВ результате мы видим, что отсутствует внутренний цикл for , а повторяется только внешний элемент цикла:
------------------------------------------- I am outer loop iteration 0 ------------------------------------------- I am outer loop iteration 1 ------------------------------------------- I am outer loop iteration 2Цикл while в Python (неопределенная итерация)
Итерация — выполнение одного и того же блока кода снова и снова. Конструкция программирования, реализующая итерацию, называется циклом.
В программировании есть два типа итераций: неопределенные и определенные:
В этом уроке вы:
- Узнаете о цикле while , конструкции управления Python, используемой для неопределенной итерации
- Узнаете, как преждевременно выйти из цикла или итерации цикла
- Исследуете бесконечные циклы
По окончании вы должны хорошо понимать, как использовать неопределенную итерацию в Python.
Цикл while
Давайте посмотрим, как используется оператор while для построения циклов в Python. Мы начнем с более простого и будем усложнять.
Характер элементарного цикла while показан ниже:
while :
statement(s) представляет собой блок для многократного выполнения, часто называется телом цикла. Обозначается отступом, как в операторе if .
Запомните: все конструкции управления в Python используют отступы для определения блоков.
Управляющая конструкция — expr обычно включает в себя одну или несколько переменных, которые инициализируются до начала цикла, а затем изменяются где-то в теле цикла.
Когда встречается while цикл, expr сначала оценивается в логическом контексте. Если это правда, тело цикла выполняется. Затем expr проверяется снова, и если это опять правда, то выполняется снова. Это продолжается до тех пор, пока expr станет ложью, после чего выполнение программы переходит к первому оператору после тела цикла.
Рассмотрим этот цикл:
while < expr >:
Вот что происходит в этом примере:
- n изначально равно 5. Выражение в while заголовке оператора n > 0 имеет значение true, поэтому тело цикла выполняется. Внутри тела цикла n уменьшается на 1 до 4 и затем печатается.
- Когда тело цикла завершено, выполнение программы возвращается к началу цикла, и выражение проверяется снова. Оно все еще true, поэтому тело выполняется снова и 3 печатается.
- Это продолжается до тех пор, пока не n станет 0. В этот момент, когда выражение проверяется, оно ложно, и цикл завершается.
Обратите внимание, что управляющее выражение цикла while проверяется первым, прежде чем еще что‑то произойдет. Если начинать с false, тело цикла не будет выполнено вообще:
n = 5 while n > 0: n -= 1 print(n)
В приведенном выше примере, когда встречается цикл, n равно 0. Управляющее выражение n > 0 уже ложно, поэтому тело цикла никогда не выполнится.
Вот еще один while цикл, включающий список, а не числовое сравнение:
a = ['foo', 'bar', 'baz'] while a: print(a.pop(-1))
Когда список оценивается в логическом контексте, он является истинным, если в нем есть элементы, и ложным, если он пуст. В этом примере a истинно, пока в нем есть элементы. После того, как все элементы будут удалены с помощью метода .pop () и список будет пуст, a примет значение «false», и цикл завершится.
Операторы Python break и continue
В каждом примере, который вы видели до этого, все тело while цикла выполняется на каждой итерации. Python предоставляет два ключевых слова, которые преждевременно завершают итерацию цикла:
- Оператор break немедленно завершает цикл. Выполнение программы продолжается до первого оператора, следующего за телом цикла.
- Оператор continue немедленно завершает текущую итерацию цикла. В основном используется для пропуска итерации, или переходу к следующей итерации.
Различие между break и continue показано на рисунке:
Это файл скрипта с именем break.py который демонстрирует работу оператора break :
n = 5 while n > 0: n -= 1 if n == 2: break print(n) print('Цикл завершен.')
Запуск break.py из интерпретатора командной строки приводит к следующему результату:
C:\Users\pythonguru\Documents>python break.py 4 3 Цикл завершен.
Когда n станет равно 2, break оператор выполняется, цикл полностью завершается, и выполнение программы переходит к print() оператору.
Следующий скрипт continue.py идентичен, за исключением continue оператора вместо break:
n = 5 while n > 0: n -= 1 if n == 2: continue print(n) print('Цикл завершен.')
Вывод continue.py выглядит так:
C:\Users\pythonguru\Documents>python continue.py 4 3 1 0 Цикл завершен.
На этот раз, когда n равно 2, continue оператор вызывает завершение этой итерации.
Таким образом, 2 не печатается. Выполнение возвращается к началу цикла, условие переоценивается, и оно все еще выполняется. Цикл возобновляется, завершается, когда n становится 0, как ранее.
Условный оператор else
Python допускает необязательное наличие else в конце цикла while . Это уникальная особенность Python, не встречающаяся в большинстве других языков программирования. Синтаксис показан ниже:
while : else:
additional_statement(s , указанный в условии else , будет выполняться , когда прервётся цикл while .
У вас может возникнуть вопрос: «Чем это полезно?».
while :
В последнем случае, без else , additional_statement(s) будет выполняться после завершения while цикла, несмотря ни на что.
Когда условия помещены в else , они будут выполняться только в том случае, если цикл завершается «по истощению», то есть, если цикл повторяется до тех пор, пока условие управления не станет ложным. Если цикл завершается break оператором, условие else не будет выполнено.
Рассмотрим следующий пример:
n = 5 while n > 0: n -= 1 print(n) else: print('Цикл выполнен.')
В этом случае цикл повторялся до тех пор, пока условие не стало false: n стало 0, а условие n > 0 стало ложным. Поскольку цикл прожил свою естественную жизнь, так сказать, условие else было выполнено. Теперь обратите внимание на разницу здесь:
n = 5 while n > 0: n -= 1 print(n) if n == 2: break else: print('Цикл выполнен.')
Этот цикл преждевременно завершается с помощью break , поэтому else не выполняется.
Может показаться, что значение слова else не совсем соответствует while циклу, а также if оператору. Гвидо ван Россум એ , создатель Python, сказал, что, если бы он начал сначала, то исключил бы условие else цикла while из языка.
Какая-нибудь из следующих интерпретаций может помочь сделать ее более понятной:
- Думайте о заголовке цикла (while n > 0) как об if операторе (if n > 0), который выполняется снова и снова, и else выполняется, когда условие становится false.
- Думайте об else , как если бы это был nobreak, поскольку следующий блок выполняется, если не был break .
Если вы не найдете ни одну из этих интерпретаций полезной, просто проигнорируйте их.
Когда может быть полезным else в цикле while ? Одна распространенная ситуация, если вы ищете в списке определенный элемент. Вы можете использовать break для выхода из цикла, если элемент найден, и else может содержать код, который должен быть выполнен, если элемент не найден:
a = ['foo', 'bar', 'baz', 'qux'] s = 'corge' i = 0 while i < len(a): if a[i] == s: # Processing for item found break i += 1 else: # Processing for item not found print(s, 'not found in list.')
Примечание. Приведенный выше код полезен для иллюстрации концепции, но на самом деле вы вряд ли будете искать список таким образом.
Прежде всего, списки обычно обрабатываются с определенной итерацией, а не while циклом. Определенная итерация (for) рассматривается в следующем уроке.
Во-вторых, Python предоставляет встроенные способы поиска элемента в списке. Вы можете использовать in оператор:
if s in a: print(s, 'found in list.') else: print(s, 'not found in list.')
list.index() метод также будет работать. Этот метод вызывает исключение ValueError, если элемент не найден в списке, поэтому для его использования необходимо понимать обработку исключений. В Python вы используете try оператор для обработки исключения. Пример приведен ниже:
try: print(a.index('corge')) except ValueError: print(s, 'not found in list.')
Вы узнаете об обработке исключений позже.
Условие else с циклом while — это немного странное, редко встречающееся явление. Но не избегайте его, в некоторых ситуациях else может внести ясность в ваш код!
Бесконечные циклы
Предположим, вы пишете while цикл, который теоретически никогда не заканчивается. Звучит странно, не правда ли?
Рассмотрим этот пример:
while True: print('foo')
Этот код был завершен сочетанием , которое вызывает прерывание с помощью клавиатуры.Или это продолжалось бы бесконечно.
Правда никогда не станет ложью, либо у нас всех очень большие проблемы. Таким образом, while True положит начало бесконечного цикла, который теоретически будет работать вечно.
Возможно это не похоже на то, что вы хотели бы сделать, но на самом деле этот шаблон используется довольно часто. Например, вы можете написать код для службы, которая запускается и работает постоянно, принимая запросы на обслуживание. «постоянно» в этом контексте означает, что он работает пока вы не отключите его.
Говоря более прозаично, запомните, что циклы могут быть разорваны с помощью оператора break . Возможно, намного проще будет завершить цикл на основе условий, распознанных в теле цикла, а не на условии, оцененном сверху.
Вот еще один вариант показанного выше цикла, который последовательно удаляет элементы из списка, .pop() пока он не станет пустым:
a = ['foo', 'bar', 'baz'] while True: if not a: break print(a.pop(-1))
Когда a становится пустым, not a становится истинным, и break оператор выходит из цикла.
Вы также можете указать несколько break операторов в цикле:
while True: if : # One condition for loop termination break . if : # Another termination condition break . if : # Yet another break
В подобных случаях, когда есть несколько условий для завершения цикла, часто проще выйти с помощью break из нескольких разных мест, чем пытаться указать все условия завершения в заголовке цикла.
Бесконечные циклы могут быть очень полезны. Просто помните, что вы должны убедиться, что цикл действительно разорвался, чтобы он не стал бесконечным.
Вложенные циклы while
Управляющие конструкции Python могут быть вложены друг в друга. Например, условные операторы if/elif/else могут быть вложенными:
if age < 18: if gender == 'M': print('son') else: print('daughter') elif age >= 18 and age < 65: if gender == 'M': print('father') else: print('mother') else: if gender == 'M': print('grandfather') else: print('grandmother')
Точно так же while цикл может содержаться в другом while цикле, как показано здесь:
a = ['foo', 'bar'] while len(a): print(a.pop(0)) b = ['baz', 'qux'] while len(b): print('>', b.pop(0))
Оператор break или continue , найденный во вложенных циклах, применяется к ближайшему охватывающему циклу:
while : statement statement while : statement statement break # Applies to while : loop break # Applies to while e: loop
Кроме того, while циклы могут быть вложены в if/elif/else операторы, и наоборот:
if : statement while : statement statement else: while : statement statement statement
while : if : statement elif : statement else: statement if : statement
Фактически, все управляющие кострукции Python могут смешиваться друг с другом в любой степени, в какой вам угодно. Так и должно быть. Представьте, как было бы неприятно, если бы были ограничения, такие как « while цикл не может быть заключен в if оператор» или « while циклы могут быть вложены друг в друга не более чем на четыре глубины». Вам было бы очень трудно помнить все.
Казалось бы, произвольные числовые или логические ограничения считаются признаком плохого дизайна программного языка. К счастью, в Python этого не много.
Однолинейные циклы while
Как и в if операторе, while цикл может быть указан в одной строке. Если в блоке, составляющем тело цикла, есть несколько операторов, они могут быть разделены точкой с запятой :
n = 5 while n > 0: n -= 1; print(n)
Это работает только с простыми утверждениями, вы не сможете объединить два составных оператора в одну строку. Таким образом, вы можете указать while цикл в одной строке, как указано выше, и пишете if оператор в одной строке:
if True: print('foo')
Но вы не можете сделать так:
while n > 0: n -= 1; if True: print('foo')
Помните, что PEP 8препятствует нескольким утверждениям в одной строке. Поэтому, вам не желательно делать так очень часто.
Вывод
В этом блоке вы узнали о неопределенной итерации с помощью цикла Python while . Теперь вы можете:
- Строить основные и сложные while циклы
- Выполнить цикл с break и continue
- Использовать else с while циклом
- Разбираться с бесконечными циклами
Теперь вы должны хорошо понимать, как выполнить фрагмент кода повторно.
ОРИГИНАЛ СТАТЬИ
Как сделать чтобы код повторялся в python
МЕРОПРИЯТИЯ
Всероссийский хакатон по биометрии
Комментарии
Популярные По порядку
Не удалось загрузить комментарии.
ВАКАНСИИ
Преподаватель на курс БД SQL в Proglib.Academy
по итогам собеседования
Методист-педагогический дизайнер в Proglib.Academy
по итогам собеседования
ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ
ООП на Python: концепции, принципы и примеры реализации
Программирование на Python допускает различные методологии, но в его основе лежит объектный подход, поэтому работать в стиле ООП на Python очень просто.
3 самых важных сферы применения Python: возможности языка
Существует множество областей применения Python, но в некоторых он особенно хорош. Разбираемся, что же можно делать на этом ЯП.
Программирование на Python: от новичка до профессионала
Пошаговая инструкция для всех, кто хочет изучить программирование на Python (или программирование вообще), но не знает, куда сделать первый шаг.