Инструкции break и continue в Python
Инструкции break и continue в Python: управление циклами for и while — прерывание и пропуск итераций.
breakнемедленно завершает весь цикл.continueпропускает оставшуюся часть текущей итерации и переходит к следующей. Обе инструкции работают в циклахforиwhile.
Инструкция break
Когда Python встречает break, он выходит из цикла немедленно — не дожидаясь ни следующей итерации, ни конца текущей.
fruits = ["яблоко", "банан", "вишня", "дыня"]
for fruit in fruits:
if fruit == "вишня":
break # нашли — выходим
print(fruit)
print("Поиск завершён")
Вывод:
яблоко банан Поиск завершён
«Вишня» и «дыня» не напечатаны: цикл прервался на «вишне», до print в этой итерации не дошло.
break в while
secret = 42
attempts = [10, 42, 7, 99]
for guess in attempts:
print(f"Пробуем: {guess}")
if guess == secret:
print("Верно!")
break
Вывод:
Пробуем: 10 Пробуем: 42 Верно!
break во вложенных циклах
break прерывает только тот цикл, в котором он стоит — внутренний. Внешний продолжается.
for i in range(1, 4):
for j in range(1, 4):
if j == 2:
break # выходим из внутреннего цикла
print(f"i={i}, j={j}")
Вывод:
i=1, j=1 i=2, j=1 i=3, j=1
Инструкция continue
continue не завершает цикл — он лишь пропускает оставшийся код текущей итерации и переходит к следующей.
numbers = [1, 2, 3, 4, 5, 6]
for n in numbers:
if n % 2 == 0:
continue # чётные пропускаем
print(n)
Вывод:
1 3 5
continue в while
n = 0
while n < 8:
n += 1
if n % 3 == 0:
continue # кратные 3 пропускаем
print(n)
Вывод:
1 2 4 5 7 8
Цикл for с else
Python поддерживает необычную конструкцию: else у цикла. Блок else выполняется, если цикл завершился без break.
primes_candidates = [4, 6, 7, 9]
for n in primes_candidates:
for divisor in range(2, n):
if n % divisor == 0:
print(f"{n} не простое (делится на {divisor})")
break
else:
print(f"{n} — простое число")
Вывод:
4 не простое (делится на 2) 6 не простое (делится на 2) 7 — простое число 9 не простое (делится на 3)
Сравнение break, continue и pass
| Инструкция | Что делает | Цикл продолжается? |
break | завершает весь цикл | нет |
continue | пропускает остаток текущей итерации | да, со следующей итерации |
pass | ничего не делает | да, продолжает текущую итерацию |
Частые ошибки
Ошибка 1: break прерывает только внутренний цикл. Начинающие ждут, что break во вложенном цикле завершит всё. Для выхода из нескольких уровней используют флаг или рефакторинг в функцию с return.
found = False
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for row in matrix:
for val in row:
if val == 5:
found = True
break # выходим из внутреннего
if found:
break # выходим из внешнего
print("Нашли:", found)
Вывод:
Нашли: True
Ошибка 2: continue не пропускает итерацию while при неправильном обновлении счётчика.
# Плохо: n никогда не инкрементируется при чётных — бесконечный цикл!
# n = 0
# while n < 5:
# if n % 2 == 0:
# continue # n не меняется → зависает
# n += 1
# Хорошо: инкремент до continue
n = 0
while n < 5:
n += 1
if n % 2 == 0:
continue
print(n)
Вывод:
1 3 5
Коротко
break— выходит из цикла немедленно; прерывает только ближайший цикл при вложенности.continue— пропускает остаток итерации и переходит к следующей.- Блок
elseу цикла выполняется, если цикл завершился безbreak. - В
whileубедитесь, что счётчик обновляется доcontinue, иначе получите бесконечный цикл.