Глиф Учебники

Как выйти из цикла: break и continue

Справочник · Python · 1 минута чтения

break сразу заканчивает цикл, программа идёт к строке после него:

Python
for n in [3, 8, -1, 5]:
    if n < 0:
        print("Нашлось отрицательное:", n)
        break
    print("Проверено:", n)
print("После цикла")
Вывод
Проверено: 3
Проверено: 8
Нашлось отрицательное: -1
После цикла

Число 5 уже не проверяется: цикл закончился на −1.

continue — пропустить шаг

continue не выходит из цикла, а пропускает остаток текущего шага и переходит к следующему:

Python
for n in range(1, 11):
    if n % 3 == 0:
        continue
    print(n, end=" ")
print()
Вывод
1 2 4 5 7 8 10

while True и break

Когда заранее неизвестно, сколько будет повторений, пишут бесконечный цикл while True и выходят из него через break по условию:

Python
words = []
while True:
    word = input()
    if word == "стоп":
        break
    words.append(word)
print("Слов:", len(words))
Ввод
яблоко
груша
стоп
Вывод
Слов: 2

Выход из вложенных циклов

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

Python
def find(grid, target):
    for i, row in enumerate(grid):
        for j, value in enumerate(row):
            if value == target:
                return i, j
    return None

grid = [[1, 2, 3], [4, 5, 6]]
print(find(grid, 5))
print(find(grid, 7))
Вывод
(1, 1)
None

Другой способ — переменная-флажок, которую проверяет внешний цикл:

Python
grid = [[1, 2, 3], [4, 5, 6]]
found = False
for row in grid:
    for value in row:
        if value == 5:
            found = True
            break
    if found:
        break
print("Найдено:", found)
Вывод
Найдено: True

else у цикла

У for и while может быть блок else. Он выполняется, если цикл закончился сам, без break. Удобно для поиска: «перебрали всё — не нашли»:

Python
n = 9
for d in range(2, n):
    if n % d == 0:
        print(n, "делится на", d)
        break
else:
    print(n, "— простое число")
Вывод
9 делится на 3

Для n = 7 делитель не найдётся, break не выполнится, и программа выведет «7 — простое число». Обратите внимание: else стоит на одном уровне с for, а не с if.

pass — не путать с continue

pass вообще ничего не делает: это заглушка там, где по правилам языка нужна хотя бы одна строка. Цикл после pass продолжает текущий шаг как обычно, а после continue — сразу переходит к следующему.

Остановить всю программу