Выход из цикла в С и Python: как правильно останавливать
Операто р «break» позволяет просто прервать цик л п ри достижении необходимого результата. После его объявления программа начнет выполнение со следующего оператора. Если «break» применяется во вложенном цикле, то выполнение кода продолжится во внешнем цикле, полностью заканчивая выполнение вложенного.
Например:
number = 0
for number in range(20):
print (“Я искомое число“ + str(number))
for another_number in range range(5):
number = number +1
if number == 3:
break
print( “ Я число, которое остановило программу:“ + str(another_number))
print ( “Цикл окончен“ )
В нашем случае , ка к т олько будет найдено , переменная «number» станет равной «3», вложенный цикл окончит свою работу , а код продолжит свою работу во внешнем цикле.
Оператор « continue »
Данный оператор применяется, когда нужно совершить не полный выход из цикла Python. Его используют, если необходимо не полностью выйти из цикла, а перейти к его следующей итерации. Или же «continue» применяется во внешнем цикле, для того чтобы пропустить выполнение вложенного.
Например:
number = 0
for number in range(20):
print (“Я искомое число“ + str(number))
continue
for another_number in range range(5):
number = number +1
if number == 3
print( “ Я число, которое остановило программу:“ + str(another_number))
print ( “Цикл окончен“ )
При таком применении оператора «continue» в ложенный цикл выполняться не будет.
Выход из цикла в С/С++
- break;
- continue.
Оператор « break »
Оператор «break» применяется в циклах «for», «while», «do-while», а также с оператором «switch». Наиболее часто оператор «break» применяется с условным оператором «if», когда в коде проверяется какое-то условие , и если найдено соответствие, то происходит выход из цикла.
Например:
#include
using namespace std;
void main()
int i, j;
// Рассмотрим применение «break» в разных ситуациях
// Применение «break» в цикле for
cout
for (i = 0; i < 10; i++)
if (i == 7)
break; // выход из цикла С, когда переменная i в нашем for будет равняться 7
// после выхода из цикла выполняется следующий код
cout >
// Применение «break» в цикле while
cout
i = 0;
while (i < 10)
if (i == 7)
break;
cout i++;
>
// Применение «break» в цикле do-while
cout
i = 0;
do
if (i == 7)
break;
cout i++;
> while (i < 10);
>
Операто р «continue»
Как и в языке Python, оператор «continue» применяется , когда необходимо перейти к следующей итерации цикл а л ибо необходим выход из вложенного цикла С во внешний. Данный оператор применяется во всех циклах С: for, while, do-while.
Например:
int main()
for (int count = 0; count < 40; ++count)
// Когда число делится на 5 без остатка, тогда пропускаем весь код при помощи оператора «continue»
if ((count % 5) == 0)
continue; // после этого оператора пропускается весь код, а выполнение программы переходит на конец цикла
// Когда число не делится без остатка на 5, тогда выполнение кода продолжается
std::cout
// Если сработало условие и отреагировал оператор «continue», тогда работа программы переносится в эту точку
>
return 0;
>
Заключение
Выход из цикла Python и С/С++ происходит по похожему сценарию. Если выучить правильное применение операторов «break» и «continue» в этих языках программирования, тогда эти знания можно будет применять и в других языках, потому что подход будет идентичным.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Выход из цикла while Python
Я возможно не так вас понял. Но может быть вы хотели что-то такое:
guestt = True while guestt: guestt = input("Pleas write your name: ") if guestt == "quit": # Условие надо поставить до добавления в список break guest_list.write(f"Hello j nice to meet you\n")
Отслеживать
ответ дан 2 янв 2022 в 16:17
838 3 3 серебряных знака 12 12 бронзовых знаков
Спасибо большое
2 янв 2022 в 16:32
Сначала проверь что guest равно на «quit» иначе оно записывается на массив а потом проверяется
signup = True while signup: guest = input("Pleas write your name: ") if guest == "quit": break guest_list.write(f"Hello j nice to meet you\n")
Отслеживать
ответ дан 2 янв 2022 в 16:18
7 3 3 бронзовых знака
Спасибо большое
2 янв 2022 в 16:32
- python
- файлы
- while
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Цикл 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 циклом
- Разбираться с бесконечными циклами
Теперь вы должны хорошо понимать, как выполнить фрагмент кода повторно.
ОРИГИНАЛ СТАТЬИ
Циклы в программировании. Цикл while
Циклы являются такой же важной частью структурного программирования, как условные операторы. С помощью циклов можно организовать повторение выполнения участков кода. Потребность в этом возникает довольно часто. Например, пользователь последовательно вводит числа, и каждое из них требуется добавлять к общей сумме. Или нужно вывести на экран квадраты ряда натуральных чисел и тому подобные задачи.
Цикл while
"While" переводится с английского как "пока". Но не в смысле "до свидания", а в смысле "пока имеем это, делаем то".
Можно сказать, while является универсальным циклом. Он присутствует во всех языках, поддерживающих структурное программирование, в том числе в Python. Его синтаксис обобщенно для всех языков можно выразить так:
while логическое_выражение
Это похоже на условный оператор if . Однако в случае циклических операторов их тела могут выполняться далеко не один раз. В случае if , если логическое выражение в заголовке возвращает истину, то тело выполняется единожды. После этого поток выполнения программы возвращается в основную ветку и выполняет следующие выражения, расположенные ниже всей конструкции условного оператора.
В случае while , после того как его тело выполнено, поток возвращается к заголовку цикла и снова проверяет условие. Если логическое выражение возвращает истину, то тело снова выполняется. Потом снова возвращаемся к заголовку и так далее.
Цикл завершает свою работу только тогда, когда логическое выражение в заголовке возвращает ложь, то есть условие выполнения цикла больше не соблюдается. После этого поток выполнения перемещается к выражениям, расположенным ниже всего цикла. Говорят, "происходит выход из цикла".
Рассмотрите блок-схему цикла while .

На ней ярко-голубыми прямоугольниками обозначена основная ветка программы, ромбом – заголовок цикла с логическим выражением, бирюзовым прямоугольником – тело цикла.
С циклом while возможны две исключительные ситуации:
- Если при первом заходе в цикл логическое выражение возвращает False , то тело цикла не выполняется ни разу. Эту ситуацию можно считать нормальной, так как при определенных условиях логика программы может предполагать отсутствие необходимости в выполнении выражений тела цикла.
- Если логическое выражение в заголовке while никогда не возвращает False , а всегда остается равным True , то цикл никогда не завершится, если только в его теле нет оператора принудительного выхода из цикла ( break ) или вызовов функций выхода из программы – quit() , exit() в случае Python. Если цикл повторяется и повторяется бесконечное количество раз, то в программе происходит зацикливание. В это время она зависает и самостоятельно завершиться не может.
Вспомним наш пример из урока про исключения. Пользователь должен ввести целое число. Поскольку функция input() возвращает строку, то программный код должен преобразовать введенное к целочисленному типу с помощью функции int() . Однако, если были введены символы, не являющиеся цифрами, то возникает исключение ValueError , которое обрабатывается веткой except . На этом программа завершается.
Другими словами, если бы программа предполагала дальнейшие действия с числом (например, проверку на четность), а она его не получила, то единственное, что программа могла сделать, это закончить свою работу досрочно.
Но ведь можно просить и просить пользователя корректно вести число, пока он его не введет. Вот как может выглядеть реализующий это код:
n = input("Введите целое число: ") while type(n) != int: try: n = int(n) except ValueError: print("Неправильно ввели!") n = input("Введите целое число: ") if n % 2 == 0: print("Четное") else: print("Нечетное")
Примечание 1. Не забываем, в языке программирования Python в конце заголовков сложных инструкций ставится двоеточие.
Примечание 2. В выражении type(n) != int с помощью функции type() проверяется тип переменной n . Если он не равен int , то есть значение n не является целым числом, а является в данном случае строкой, то выражение возвращает истину. Если же тип n равен int , то данное логическое выражение возвращает ложь.
Примечание 3. Оператор % в языке Python используется для нахождения остатка от деления. Так, если число четное, то оно без остатка делится на 2, то есть остаток будет равен нулю. Если число нечетное, то остаток будет равен единице.
Проследим алгоритм выполнения этого кода. Пользователь вводит данные, они имеют строковый тип и присваиваются переменной n . В заголовке while проверяется тип n . При первом входе в цикл тип n всегда строковый, то есть он не равен int . Следовательно, логическое выражение возвращает истину, что позволяет зайти в тело цикла.
Здесь в ветке try совершается попытка преобразования строки к целочисленному типу. Если она была удачной, то ветка except пропускается, и поток выполнения снова возвращается к заголовку while .
Теперь n связана с целым числом, следовательно, ее тип int , который не может быть не равен int . Он ему равен. Таким образом логическое выражение type(n) != int возвращает False , и весь цикл завершает свою работу. Далее поток выполнения переходит к оператору if-else, находящемуся в основной ветке программы. Здесь могло бы находиться что угодно, не обязательно условный оператор.
Вернемся назад. Если в теле try попытка преобразования к числу была неудачной, и было выброшено исключение ValueError , то поток выполнения программы отправляется в ветку except и выполняет находящиеся здесь выражения, последнее из которых просит пользователя снова ввести данные. Переменная n теперь имеет новое значение.
После завершения except снова проверяется логическое выражение в заголовке цикла. Оно даст True , так как значение n по-прежнему строка.
Выход из цикла возможен только тогда, когда значение n будет успешно конвертировано в число.
Рассмотрим следующий пример:
total = 100 i = 0 while i 5: n = int(input()) total = total - n i = i + 1 print("Осталось", total)
Сколько раз "прокрутится" цикл в этой программе, то есть сколько итераций он сделает? Ответ: 5.
- Сначала переменная i равна 0. В заголовке цикла проверяется условие i < 5 , и оно истинно. Тело цикла выполняется. В нем меняется значение i , путем добавления к нему единицы.
- Теперь переменная i равна 1. Это меньше пяти, и тело цикла выполняется второй раз. В нем i меняется, ее новое значение 2.
- Два меньше пяти. Тело цикла выполняется третий раз. Значение i становится равным трем.
- Три меньше пяти. На этой итерации i присваивается 4.
- Четыре по прежнему меньше пяти. К i добавляется единица, и теперь ее значение равно пяти.
"Смысловая нагрузка" данного цикла – это последовательное вычитание из переменной total вводимых чисел. Переменная i в данном случае играет только роль счетчика итераций цикла. В других языках программирования для таких случаев предусмотрен цикл for , который так и называется: "цикл со счетчиком". Его преимущество заключается в том, что в теле цикла не надо изменять переменную-счетчик, ее значение меняется автоматически в заголовке for .
В языке Python тоже есть цикл for . Но это не цикл со счетчиком. В Питоне он предназначен для перебора элементов последовательностей и других сложных объектов. Данный цикл и последовательности будут изучены в последующих уроках.
Для while наличие счетчика не обязательно. Представим, что надо вводить числа, пока переменная total больше нуля. Тогда код будет выглядеть так:
total = 100 while total > 0: n = int(input()) total = total - n print("Ресурс исчерпан")
Сколько раз здесь выполнится цикл? Неизвестно, все зависит от вводимых значений. Поэтому у цикла со счетчиком известно количество итераций, а у цикла без счетчика – нет.
Самое главное для цикла while – чтобы в его теле происходили изменения значений переменных, которые проверяются в его заголовке, и чтобы хоть когда-нибудь наступил случай, когда логическое выражение в заголовке возвращает False . Иначе произойдет зацикливание.
Примечание 1. Не обязательно в выражениях total = total - n и i = i + 1 повторять одну и ту же переменную. В Python допустим сокращенный способ записи подобных выражений: total -= n и i += 1 .
Примечание 2. При использовании счетчика он не обязательно должен увеличиваться на единицу, а может изменяться в любую сторону на любое значение. Например, если надо вывести числа кратные пяти от 100 до 0, то изменение счетчика будет таким i = i - 5 , или i -= 5 .
Примечание 3. Для счетчика не обязательно использовать переменную с идентификатором i . Можно назвать переменную-счетчик как угодно. Однако так принято в программировании, что счетчики обозначают именами i и j (иногда одновременно требуются два счетчика).
Практическая работа
- Измените последний код из урока так, чтобы переменная total не могла уйти в минус. Например, после предыдущих вычитаний ее значение стало равным 25. Пользователь вводит число 30. Однако программа не выполняет вычитание, а выводит сообщение о недопустимости операции, после чего осуществляет выход из цикла.
- Используя цикл while , выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в Python обозначается как ** . Фрагмент вывода:
. 32 64 128 256 512 1024 .
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
