Оператор прерывания цикла break
Иногда бывает нужно прервать выполнение цикла преждевременно. Оператор break прерывает ближайший цикл for или while.
Усовершенствуем с помощью оператора break программу, проверяющую число на простоту:
num = int(input())
flag = True
for i in range(2, num):
if num % i == 0:
flag = False
break
if flag:
print('Число простое')
else:
print('Число составное')
Как только мы встречаем делитель отличный от 1 и num, мы меняем значение сигнальной метки и прерываем цикл, поскольку дальнейшее его выполнение лишено смысла: число гарантированно не является простым.
Оператор прерывания цикла break позволяет ускорять программы, так как мы избавляемся от лишних итераций.
Напишем программу, использующую цикл for, которая считывает 10 чисел и суммирует их до тех пор, пока не обнаружит отрицательное число. В этом случае выполнение цикла прерывается командой break:
result = 0
for i in range(10):
num = int(input())
if num < 0:
break
result += num
print(result)
Оператор прерывания цикла break удобен в связке с сигнальными метками: когда после проверки некоторого условия нам нет смысла продолжать выполнение цикла.
Напишем программу, которая определяет, содержит ли введенное пользователем число цифру 7.
num = int(input())
number = num
flag = False
while num != 0:
last_digit = num % 10
if last_digit == 7:
flag = True
break
num //= 10
if flag:
print('Число', number, 'содержит цифру 7')
else:
print('Число', number, 'не содержит цифру 7')
Как только мы встретили цифру 7, мы меняем значение сигнальной метки и прерываем цикл с помощью оператора break. Мы можем и не прерывать цикл преждевременно, а дождаться его естественного завершения (условие num != 0, то есть все цифры числа обработаны), однако в таком случае мы будем совершать лишнюю работу, и в случае, если число очень большое, программа будет работать медленнее.
Бесконечные циклы
В предыдущих уроках мы говорили о цикле, который не имеет возможности завершиться и назвали его бесконечным циклом. Самый простой способ создать бесконечный цикл в Python – записать следующий код:
while True:
print('Python is awesome!')
Результатом выполнения такого кода будет бесконечное количество строчек текста:
Python is awesome!
Python is awesome!
.
.
.
Python is awesome!
Python is awesome!
Python is awesome!
Бесконечный цикл продолжает повторяться до тех пор, пока программа не будет прервана. Изучив оператор break, мы получили механизм прерывания бесконечных циклов.
Возможно, вам может показаться, что бесконечные циклы лишены смысла, однако это не совсем так. Например, вы можете написать программу, которая запускается и работает, постоянно принимая запросы на обслуживание. Программный код такой программы может выглядеть так:
while True:
query = get_new_query()
query.process()
Иногда с помощью бесконечного цикла удается сделать программный код более читабельным. Более простым может быть завершение цикла на основе условий внутри тела цикла, а не на основе условий в его заголовке:
while True:
if условие 1:
break
...
if условие 2:
break
...
if условие 3:
break
В подобных случаях, когда существует множество причин завершения цикла, часто их проще выделить из нескольких разных мест, чем пытаться указать все условия завершения в заголовке цикла.
Важно: бесконечные циклы могут быть очень полезными. Просто помните, что вы должны убедиться, что цикл в какой-то момент будет прерван, чтобы он действительно не становился бесконечным.
Оператор continue
Другая стандартная идиома циклов — пропуск отдельных элементов при переборе. Оператор continue позволяет перейти к следующей итерации цикла for или while до завершения всех команд в теле цикла.
Напишем программу, которая выводит все числа от 1 до 100, кроме чисел 7, 17, 29 и 78.
for i in range(1, 101):
if i == 7 or i == 17 or i == 29 or i == 78:
continue
print(i)
Примечания
Примечание 1. Оператор break прерывает выполнение ближайшего цикла, а не программы, то есть далее будет выполнена команда, следующая сразу за циклом.
Примечание 2. Графическое представление операторов break и continue имеет вид:
