Python операторы break, continue и использование блока else в циклах

Оператор break в языке Python прерывает работу наиболее вложенного цикла for или while. Операторы цикла могут иметь также блок else. Он выполняется, когда цикл завершается через исчерпание значений для итерируемого объекта (если речь идёт о цикле for) или когда условие цикла становится равным false (в случае цикла while). При этом если цикл прерывается при помощи оператора break, то в блок else мы не попадём.

Давайте рассмотрим все основные типовые случаи на примерах. 

Прерывание внутреннего цикла for или while с помощью break

Если мы хотим прерывать работу внутреннего цикла при каких-то условиях, то для этого используем оператор break:

if __name__ == '__main__':
    for x in range(1, 5):
        print('x = ', x)
        for y in range(1, 5):
            print('y = ', y)
            if x == y:
                print(f'\'x\' равен \'y\', и их значение: {x}, прерываем внутренний цикл')
                break

Если запустить этот скрипт, то на экране мы увидим следующий результат:

x = 1
y = 1
'x' равен 'y', и их значение: 1, прерываем внутренний цикл
x = 2
y = 1
y = 2
'x' равен 'y', и их значение: 2, прерываем внутренний цикл
x = 3
y = 1
y = 2
y = 3
'x' равен 'y', и их значение: 3, прерываем внутренний цикл
x = 4
y = 1
y = 2
y = 3
y = 4
'x' равен 'y', и их значение: 4, прерываем внутренний цикл

Думаю, что результат работы скрипта понятен: как только значение y во внутреннем цикле будет равно значению x из внешнего цикла, мы сразу прерываем работу внутреннего цикла при помощи оператора break, что и видно при выводе результатов скрипта на экран консоли.

Если мы перепишем этот скрипт с использованием двух циклов while вместо for, то вывод на консоли и эффект работы оператора break будут теми же самими:

if __name__ == '__main__':
    x = 1
    while x < 5:
        print('x = ', x)
        y = 1
        while y < 5:
            print('y = ', y)
            if x == y:
                print(f'\'x\' равен \'y\', и их значение: {x}, прерываем внутренний цикл')
                break
            y += 1
        x += 1

Использование блока else для циклов

Теперь посмотрим, чем может быть полезен блок else, если он применяется к циклам. Рассмотрим такой пример скрипта:

if __name__ == '__main__':
    for x in range(1, 5):
        for y in range(1, 5):
            print(f'x = {x}, y = {y}')
            if 7 - x == y:
                print(f'Условие \'7 - x == y\' истинно, т.к. 7 - {x} == {y}. Прерываем внутренний цикл по y')
                break
        else:
            print(f'Цикл по y исчерпан. Условие \'7 - x == y\' ни разу не было истинным.')

Итак, здесь у нас два цикла for - внешний по x от 1 до 4, включительно (вы же помните как работает функция range() в Python, верно?), а также вложенный цикл по y, также от 1 до 4, включительно. Во вложенном цикле мы выводим текущие значения x и y, а также делаем простую арифметическую проверку, что 7 - x равно y. Если это условие выполнится, мы выводим соответствующее сообщение на экран, а также прерываем работу вложенного цикла, поскольку внутри if у нас указан оператор break. Обратите внимание, что блок else выставлен с одним и тем же отступом слева, как и for для вложенного цикла, это означает, что он относится не к вложенному оператору if, а к вложенному циклу for. В блок else мы зайдем в том случае, если наш вложенный цикл исчерпал перебор всех значений, но арифметическое условие ни разу не выполнилось. Давайте запустим скрипт и посмотрим на его вывод:

x = 1, y = 1
x = 1, y = 2
x = 1, y = 3
x = 1, y = 4
Цикл по y исчерпан. Условие '7 - x == y' ни разу не было истинным.
x = 2, y = 1
x = 2, y = 2
x = 2, y = 3
x = 2, y = 4
Цикл по y исчерпан. Условие '7 - x == y' ни разу не было истинным.
x = 3, y = 1
x = 3, y = 2
x = 3, y = 3
x = 3, y = 4
Условие '7 - x == y' истинно, т.к. 7 - 3 == 4. Прерываем внутренний цикл по y
x = 4, y = 1
x = 4, y = 2
x = 4, y = 3
Условие '7 - x == y' истинно, т.к. 7 - 4 == 3. Прерываем внутренний цикл по y

Посмотрите внимательно на то, как отработал скрипт. Первые два раза внутренний цикл по y "прокрутился" без результатов, т.е. ни разу арифметическое условие 7 - x не было равно y, и в оператор if мы ни разу не зашли и не выполнили оператор break. Далее дважды сработало условие if и мы прерывали внутренний цикл с помощью break, тем самым минуя попадание в блок else для цикла.

Использование оператора continue для циклов

Оператор continue продолжает следующую итерацию цикла и работает аналогично тому, как это сделано в языках C/C++.

Посмотрим на короткий пример использования оператора continue в Python:

if __name__ == '__main__':
    for x in range(1, 10):
        if x % 3 == 0:
            print(f'x = {x} и делится без остатка на 3. Продолжаем цикл с помощью continue.')
            continue
        print(f'x = {x} и не делится без остатка на 3.')

Здесь также должно быть всё предельно понятно: у нас есть цикл по диапазону от 1 до 9 включительно, внутри цикла мы проверяем, что очередное значение x делится без остатка на 3. Если это так, то мы сообщаем об этом на экране консоли и переходим к следующей итерации цикла, минуя самый последний оператор print. Если же текущее значение x не делится без остатка на 3, наоборот, выполнится последний оператор print, и в оператор if мы не зайдем.

Результаты этого скрипта при запуске следующие:

x = 1 и не делится без остатка на 3.
x = 2 и не делится без остатка на 3.
x = 3 и делится без остатка на 3. Продолжаем цикл с помощью continue.
x = 4 и не делится без остатка на 3.
x = 5 и не делится без остатка на 3.
x = 6 и делится без остатка на 3. Продолжаем цикл с помощью continue.
x = 7 и не делится без остатка на 3.
x = 8 и не делится без остатка на 3.
x = 9 и делится без остатка на 3. Продолжаем цикл с помощью continue.

Ровно так же оператор continue работает и для цикла while:

if __name__ == '__main__':
    x = 0
    while x < 9:
        x += 1
        if x % 3 == 0:
            print(f'x = {x} и делится без остатка на 3. Продолжаем цикл с помощью continue.')
            continue
        print(f'x = {x} и не делится без остатка на 3.')

Результат этого варианта с while будет точно таким же, как и предыдущий пример с циклом for.

В этой статье мы поняли с вами, как использовать операторы break и continue в циклах Python, а также поняли, в чём особенности использования блока else для циклов в Python. Моим читателям спасибо за внимание, делитесь своими мыслями в комментариях к статье и удачи в изучении Python!

Яндекс.Метрика