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

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x