Python
Break и continue в Python
break и continue управляют ходом цикла, но делают разные вещи. break полностью завершает ближайший цикл. continue не завершает цикл, а только пропускает текущий шаг и переходит к следующей итерации
Если говорить совсем практично: break нужен, когда дальше искать или повторять уже нет смысла. continue нужен, когда текущий элемент не подходит, но остальные элементы еще нужно обработать
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы
Главное отличие
| Команда | Что делает | Когда использовать |
|---|---|---|
break |
выходит из цикла | нашли нужный элемент, получили команду выхода, достигли лимита |
continue |
пропускает текущую итерацию | встретили пустую строку, неправильное значение, отмененный заказ |
Обе команды работают внутри for и while. Но важно помнить: они управляют только ближайшим циклом, внутри которого находятся
break на простом примере
Представим, что нужно найти первое число больше 10. Когда число найдено, нет смысла смотреть остальной список
numbers = [3, 7, 12, 18, 4]
for number in numbers:
if number > 10:
print(f'Найдено: {number}')
break
Результат:
Найдено: 12
Цикл остановился на 12. Значение 18 уже не проверялось, потому что break завершил цикл полностью
Без break программа вывела бы все числа больше 10:
numbers = [3, 7, 12, 18, 4]
for number in numbers:
if number > 10:
print(f'Найдено: {number}')
Такой вариант тоже может быть правильным, если нужны все совпадения. break выбирают именно тогда, когда достаточно первого результата
continue на простом примере
Теперь задача другая: вывести только положительные числа и пропустить нули с отрицательными значениями
numbers = [5, -2, 0, 8, -1, 3]
for number in numbers:
if number <= 0:
continue
print(number)
Результат:
5
8
3
Когда Python встречает continue, он пропускает оставшийся код внутри цикла. Строка print(number) для отрицательных чисел и нуля не выполняется, но сам цикл продолжается
continue хорошо читается как «этот элемент нам не подходит, идем дальше»
Когда break и continue путают
Частая ошибка новичка — поставить break, когда нужно было пропустить один элемент
prices = [1200, 0, 900, 1500]
for price in prices:
if price == 0:
break
print(price)
Результат:
1200
После нуля цикл закончился, поэтому 900 и 1500 не обработались. Если ноль означает испорченную цену, а не конец списка, нужен continue
prices = [1200, 0, 900, 1500]
for price in prices:
if price == 0:
continue
print(price)
Результат:
1200
900
1500
Перед выбором команды задайте себе вопрос: нужно остановить весь цикл или только пропустить текущий элемент
Пример: обработка строк из файла
Допустим, есть список строк. Пустые строки нужно пропускать, а строка STOP означает конец полезных данных
lines = ['apple', '', 'banana', 'STOP', 'orange']
for line in lines:
if line == '':
continue
if line == 'STOP':
break
print(line.upper())
Результат:
APPLE
BANANA
Здесь continue пропускает пустую строку, а break завершает цикл при стоп-сигнале. orange уже не обрабатывается, потому что после STOP данные считаются ненужными
Такой шаблон встречается при чтении логов, CSV-файлов, команд пользователя и списков задач
break в цикле while
break часто используют с while True, когда цикл должен работать до команды выхода
while True:
command = input('Команда: ')
if command == 'exit':
print('Выход')
break
print(f'Выполняю: {command}')
Такой цикл не имеет обычного условия в строке while. Он всегда начинается как бесконечный, а завершение находится внутри блока. Это удобно для меню, консольных программ и простых игр
Главное — не прятать break слишком глубоко. Человек, который читает код, должен быстро увидеть, как программа выходит из цикла
continue в цикле while
С while команда continue требует особой аккуратности. Если до continue не изменить счетчик или состояние, можно получить бесконечный цикл
Проблемный пример:
count = 0
while count < 5:
if count == 2:
continue
print(count)
count += 1
Когда count станет равным 2, Python будет снова и снова попадать в continue. Строка count += 1 не выполнится, поэтому цикл зависнет
Исправленный вариант:
count = 0
while count < 5:
if count == 2:
count += 1
continue
print(count)
count += 1
Результат:
0
1
3
4
В for такая ошибка встречается реже, потому что следующий элемент берется автоматически. В while за изменение состояния часто отвечает сам разработчик
Вложенные циклы
break завершает только ближайший цикл. Если цикл находится внутри другого цикла, внешний продолжит работу
groups = [
['Анна', 'Игорь'],
['Мария', 'Сергей'],
['Олег', 'Дина']
]
for group in groups:
for name in group:
if name == 'Сергей':
print('Нашли Сергея')
break
print('Проверка группы закончена')
Когда найден Сергей, завершается внутренний цикл по именам, но внешний цикл по группам продолжает работу
Если нужно выйти сразу из двух циклов, обычно делают флаг:
found = False
for group in groups:
for name in group:
if name == 'Сергей':
found = True
break
if found:
break
Флаг делает намерение явным: мы нашли нужное значение и больше не хотим проверять остальные группы
Блок else у цикла
У циклов for и while в Python есть блок else. Он выполняется только тогда, когда цикл завершился без break
numbers = [1, 3, 5, 7]
for number in numbers:
if number % 2 == 0:
print('Есть четное число')
break
else:
print('Четных чисел нет')
Результат:
Четных чисел нет
Если добавить в список 8, сработает break, а блок else уже не выполнится
Эта конструкция полезна для поиска. Можно читать ее так: «если цикл прошел все элементы и не остановился, значит, ничего не найдено»
Частые ошибки
Использовать break вместо continue, из-за чего цикл останавливается слишком рано
Ставить continue до изменения счетчика в while
Прятать break в нескольких уровнях условий, так что выход из цикла трудно заметить
Думать, что break завершит все вложенные циклы сразу
Использовать continue, когда проще написать понятное условие без него
Практические задачи
Найдите первое число, которое делится на 7, и остановите цикл через break
Выведите только непустые строки из списка, используя continue
Обработайте список заказов: отмененные пропускайте, после статуса stop завершайте цикл
Сделайте меню, которое работает до команды exit
Проверьте список паролей и выведите сообщение, если подходящий пароль не найден, используя for и else
break отвечает за остановку цикла. continue отвечает за пропуск одного шага. Если нужно прекратить поиск, обработку или меню, выбирайте break. Если нужно проигнорировать текущий элемент и перейти к следующему, выбирайте continue
Самая надежная проверка — проговорить действие команды вслух. «На этом элементе все заканчиваем» означает break. «Этот элемент плохой, но остальные нужны» означает continue