Циклы 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
- Реклама на сайте
Как остановить выполнение цикла for?
Как сделать, чтобы когда цикл дошел до какого-либо значения, например 20 (if (i==20) , мы бы из него вышли?
Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 8 мар 2017 в 9:33
59 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака
Стоп, а дальше что?
8 мар 2017 в 9:34
@Ev_Hyper ничего, просто стоп и все, он дальше не идет
8 мар 2017 в 9:34
for (int i = 0; i <=20; i++)
8 мар 2017 в 9:36
@Ev_Hyper и так знаю что так можно, думаю, мб break юзать
8 мар 2017 в 9:38
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Если условие самого цикла не хотите изменять, то добавьте в тело цикла условную конструкцию, при выполнении которой будет происходить выход из цикла с помощью break:
for (int i = 0; i Console.ReadKey();
В противном же случае делайте, как вам предложил в комментариях @Ev_Hyper:
for (int i = 0; i
Операторы break и continue в C++

Оператор break в C++
С оператором break вы уже встречались, если читали наши статьи об операторе switch и о цикле for. И наверняка уже имеете представление о том, как он работает. Поговорим еще немного об этом операторе, возможно кому-то будет полезно.
Достаточно часто при использовании циклов и почти всегда при использовании оператора switch , программисту необходимо прервать выполнение тела цикла или тела switch соответственно. break , как раз используется в таких случаях.
Так же, с помощью этого оператора прерывается бесконечный цикл. Когда его нужно прервать, в тело цикла добавляется условие, при выполнении которого сработает оператор break , а цикл завершит работу. В следующем примере, реализована простая игра: один игрок загадывает число от 1 до 7, второй должен отгадать его.
Пример: оператор break C++
using namespace std ;
setlocale ( LC_ALL , "rus" ) ;
int digit = 0 ;
int answer = 0 ;
cout << "Введите число от 1 до 7, которое должен угадать ваш противник:" ;
cin >> digit ; // ввод загаданного числа
if ( digit >= 1 && digit <= 7 ) // проверяем число на соответствие заданному диапазону
break ; // если соответствует - прервать цикл
else // иначе попросить ввести число снова
cout << "Неправильный диапазон! Введите число от 1 до 7:" ;
system ( "cls" ) ; //эта функция очистит экран и противник не увидит, какое число было введено
cout << "Попробуйте угадать число, которое загадал ваш оппонент!\n" ;
cout << "Это целое число от 1 до 7. Введите ваш вариант ответа:" ;
for ( int myTry = 1 ; ; myTry ++ ) // myTry будет хранить число попыток
cin >> answer ;
if ( answer < 1 || answer >7 ) // если диапазон нарушен
myTry -- ; // уменьшаем счетчик попыток на единицу
cout << ". Введите число в диапазоне от 1 до 7:" ;
else if ( digit == answer ) // если числа совпадают
cout << "Поздравляем! Вы отгадали число с " << myTry << "-й попытки!\n\n" ;
break ; // прервать цикл
else // иначе еще одна попытка отгадать
cout << "Вы не угадали! Попробуйте еще раз:" ;
Чтобы всё было честно и игрок, который загадывает, не мог ввести число из недопустимого диапазона, запускаем бесконечный цикл в котором и происходят ввод и проверка числа. Если число соответствует необходимому диапазону – цикл прерывается (строки 15 – 18), если же нет – на экране появляется предупреждение и предложение ввести число снова. Так будет происходить, пока введенное число не войдет в нужный диапазон.
После ввода корректного числа, в строке 25 вызываем специальную функцию system(“cls”); , которая очистит содержимое экрана, перед тем, как второй игрок приступит к отгадыванию числа (сработает только в windows).
Далее определяем второй бесконечный цикл (строки 29 – 47), но уже со счетчиком myTry . Он будет считать количество попыток игрока отгадать число. Игрок вводит число и оно сразу проверяется на соответствие диапазону в строках 33 – 37.
Если не соответствует – предупреждаем и отнимаем единицу от счетчика попыток myTry . Иначе если число в нужный диапазон вошло, проверяем соответствует ли оно загаданному числу (строки 38 – 42): да – поздравляем и прерываем цикл, нет – переходим к выполнению строк 43 – 46 – говорим об ошибке и предлагаем ввести число снова.


Оператор continue в C++
Этот оператор применяется тогда, когда необходимо прервать (пропустить) текущую итерацию цикла и приступить к следующей итерации. При его выполнении в цикле for происходит остановка текущей итерации, переход к изменению управляющей переменной, а затем проверка условия продолжения выполнения цикла.
Решим такую задачу: Необходимо вывести на экран те числа, которые делятся на 7 без остатка и находятся в диапазоне от 1 до 70 .
Урок №70. Операторы break и continue
Хотя вы уже видели оператор break в связке с оператором switch, все же он заслуживает большего внимания, поскольку может использоваться и с циклами. Оператор break приводит к завершению выполнения циклов do, for или while.
Оглавление:
- break и switch
- break и циклы
- break и return
- Оператор continue
- break и continue
break и switch
В контексте оператора switch оператор break обычно используется в конце каждого кейса для его завершения (предотвращая fall-through):
switch ( op )
doAddition ( a , b ) ;
doSubtraction ( a , b ) ;
doMultiplication ( a , b ) ;
doDivision ( a , b ) ;
break и циклы
В контексте циклов оператор break используется для завершения работы цикла раньше времени:
int sum = 0 ;
// Разрешаем пользователю ввести до 10 чисел
for ( int count = 0 ; count < 10 ; ++ count )
std :: cout << "Enter a number to add, or 0 to exit: " ;
std :: cin >> val ;
// Выходим из цикла, если пользователь введет 0
if ( val == 0 )
// В противном случае, добавляем число к общей сумме
std :: cout << "The sum of all the numbers you entered is " << sum << "\n" ;
Эта программа позволяет пользователю ввести до 10 чисел и в конце подсчитывает их сумму. Если пользователь введет 0 , то выполнится break и цикл завершится (не важно, сколько чисел в этот момент успел ввести пользователь).
Обратите внимание, оператор break может использоваться и для выхода из бесконечного цикла:
while ( true ) // бесконечный цикл
std :: cout << "Enter 0 to exit or anything else to continue: " ;
std :: cin >> val ;
// Выходим из цикла, если пользователь ввел 0
if ( val == 0 )
std :: cout << "We're out!\n" ;
break и return
Новички часто путают или не понимают разницы между операторами break и return. Оператор break завершает работу switch или цикла, а выполнение кода продолжается с первого стейтмента, который находится сразу же после этого switch или цикла. Оператор return завершает выполнение всей функции, в которой находится цикл, а выполнение продолжается в точке после вызова функции:
int breakOrReturn ( )
while ( true ) // бесконечный цикл
std :: cout << "Enter 'b' to break or 'r' to return: " ;
std :: cin >> sm ;
break ; // выполнение кода продолжится с первого стейтмента после цикла
return 1 ; // выполнение return приведет к тому, что управление сразу возвратится в caller (в этом случае, в функцию main())
// Использование оператора break приведет к тому, что выполнение цикла продолжится здесь
std :: cout << "We broke out of the loop\n" ;
int returnValue = breakOrReturn ( ) ;
std :: cout << "Function breakOrContinue returned " << returnValue << '\n' ;
Оператор continue
Оператор continue позволяет сразу перейти в конец тела цикла, пропуская весь код, который находится под ним. Это полезно в тех случаях, когда мы хотим завершить текущую итерацию раньше времени. Например:
for ( int count = 0 ; count < 20 ; ++ count ) // Если число делится нацело на 4, то пропускаем весь код в этой итерации после continue if ( ( count % 4 ) == 0 ) continue ; // пропускаем всё и переходим в конец тела цикла // Если число не делится нацело на 4, то выполнение кода продолжается std :: cout << count << std :: endl ; // Точка выполнения после оператора continue перемещается сюда
Эта программа выведет все числа от 0 до 19, которые не делятся нацело на 4.
В случае с циклом for часть инкремента/декремента счетчика по-прежнему выполняется даже после выполнения continue (так как инкремент/декремент происходит вне тела цикла).
Будьте осторожны при использовании оператора continue с циклами while или do while. Поскольку в этих циклах инкремент счетчиков выполняется непосредственно в теле цикла, то использование continue может привести к тому, что цикл станет бесконечным! Например:
int count ( 0 ) ;
while ( count < 10 )
if ( count == 5 )
continue ; // переходим в конец тела цикла
std :: cout << count << " " ;
// Точка выполнения после оператора continue перемещается сюда
Предполагается, что программа выведет все числа от 0 до 9, за исключением 5. Но на самом деле:
А затем цикл станет бесконечным. Когда значением count становится 5 , то условие оператора if станет true, затем выполнится continue и мы, минуя вывод числа и инкремент счетчика, перейдем к следующей итерации. Переменная count так и не увеличится. Как результат, в следующей итерации переменная count по-прежнему останется со значением 5 , а оператор if по-прежнему останется true, и цикл станет бесконечным.
А вот правильное решение, но с использованием цикла do while: