Управление ходом программы

break, continue и вложенные условия в цикле

Содержание курса

Почему continue иногда зацикливает while

В цикле for следующий элемент выдаётся самим циклом. В while условие тоже проверяется заново, но переменную-счётчик обычно меняет ваш код. Если поставить continue до увеличения счётчика, выполнение снова вернётся к тому же значению. Так появляется бесконечный цикл, хотя условие остановки на вид написано правильно.

i = 0
while i < 4:
    i += 1
    if i == 2:
        continue
    print(i)

Результат — 1, 3, 4 на отдельных строках: число 2 пропущено, но счётчик всё равно вырос. Проверьте порядок на своём примере: строка, которая приближает while к завершению, должна выполняться на каждом проходе, в том числе перед continue. Если нужно остановить цикл при особом значении, используйте break; если нужно лишь пропустить обработку этого значения, оставьте continue. При зависании сначала найдите значения переменных перед условием while и перед строкой continue: одинаковое значение на каждом проходе почти всегда указывает на пропущенное обновление. Закрепить разницу между двумя командами можно в практическом задании на break и continue.

Вложенный if в цикле и типичная путаница break vs continue

Сами по себе break и continue — просто ключевые слова. Чтобы они срабатывали по условию, а не безусловно, их помещают внутрь if в теле цикла. Вот как это выглядит в общем виде:

for элемент in последовательность:
    if особый_случай_1:
        break        # выходим из цикла полностью
    if особый_случай_2:
        continue     # пропускаем остаток этой итерации
    # обычный код — выполняется, если ни одно условие не сработало

Вложенный if здесь играет роль диспетчера: на каждой итерации он проверяет, что за значение пришло, и направляет поток в нужную ветку. Это стандартный паттерн — почти любой реальный цикл с break или continue выглядит именно так.

Теперь о типичной ошибке. Начинающие нередко путают эти две инструкции, потому что обе стоят внутри if и обе «прерывают» нормальный ход итерации. Разница в масштабе действия:

  • break — выход из цикла навсегда, следующих итераций не будет.
  • continue — только текущая итерация «срезается», цикл продолжается дальше.

Ошибка обычно выглядит так: нужно остановить весь цикл при находке нужного элемента, а вместо break ставят continue. Цикл при этом не останавливается — он просто пропускает тот самый элемент и перебирает оставшиеся:

numbers = [1, 4, 7, 3, 9]

# Неправильно: хотели остановиться при нахождении 7, но поставили continue
for n in numbers:
    if n == 7:
        continue     # 7 просто пропускается, цикл идёт дальше
    print(n)

# Вывод: 1  4  3  9 — семёрка пропущена, но цикл не остановился
# Правильно: break действительно останавливает цикл
for n in numbers:
    if n == 7:
        break        # нашли — выходим
    print(n)

# Вывод: 1  4 — дойдя до 7, цикл завершился

Разница в выводе наглядна: в первом случае программа обошла весь список, только проигнорировав семёрку. Во втором — остановилась ровно на ней.

Обратная ошибка встречается реже, но тоже бывает: ставят break там, где хотели лишь пропустить одно значение. Тогда цикл обрывается при первом же «неудобном» элементе, а остальные так и не обрабатываются.

Практический способ не ошибиться — спросить себя: «После этой инструкции цикл должен продолжить работу или закончить?» Если продолжить — continue. Если закончить — break.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.