Больше о циклах
Команда break
Вы уже встречали команду break. Ее можно использовать, чтобы немедленно остановить выполнение цикла. Типичный пример ее применения - ситуация, где программа спрашивает у пользователя ввод, а выполнение заканчивается только после получения определенного значения.
Того же поведения можно добиться без команды break, используя подходящее условие. Обе программы ниже просят пользователя вводить числа и вычисляют сумму чисел, пока пользователь не введет -1.
# 1st version using the break command
sum = 0
while True:
number = int(input("Please type in a number, -1 to exit: "))
if number == -1:
break
sum += number
print (f"The sum is {sum}")# 2nd version without the break command
sum = 0
number = 0
while number != -1:
number = int(input("Please type in a number, -1 to exit: "))
if number != -1:
sum += number
print (f"The sum is {sum}")Обе программы выводят одно и то же при одинаковом вводе, например:
Please type in a number, -1 to exit: 2 Please type in a number, -1 to exit: 4 Please type in a number, -1 to exit: 5 Please type in a number, -1 to exit: 3 Please type in a number, -1 to exit: -1 The sum is 14
Итак, функционально эти две программы практически одинаковы. Однако первый способ часто проще, потому что условие number == -1 появляется только один раз, а переменную number не нужно инициализировать вне цикла.
Команду break и подходящее условие также можно использовать вместе в цикле while. Например, следующий цикл повторяется, пока сумма чисел не больше 100, но также останавливается, если пользователь вводит число -1.
sum = 0
while sum <= 100:
number = int(input("Please type in a number, -1 to exit: "))
if number == -1:
break
sum += number
print (f"The sum is {sum}")Несколько примеров выполнения программы:
Please type in a number, -1 to exit: 15 Please type in a number, -1 to exit: 8 Please type in a number, -1 to exit: 21 Please type in a number, -1 to exit: -1 The sum is 44
Please type in a number, -1 to exit: 15 Please type in a number, -1 to exit: 8 Please type in a number, -1 to exit: 21 Please type in a number, -1 to exit: 45 Please type in a number, -1 to exit: 17 The sum is 106
В первом примере выполнение цикла останавливается, потому что пользователь вводит число -1. Во втором примере оно останавливается, потому что сумма чисел превышает 100.
Как всегда в программировании, одного и того же поведения можно добиться разными способами. Следующая программа функционально идентична предыдущей:
sum = 0
while True:
number = int(input("Please type in a number, -1 to exit: "))
if number == -1:
break
sum += number
if sum > 100:
break
print (f"The sum is {sum}")Команда continue
Еще один способ изменить выполнение цикла - команда continue. Она заставляет выполнение цикла сразу перейти к началу цикла, где находится условие. Затем выполнение продолжается обычным образом с проверки условия:
Например, следующая программа суммирует числа из ввода, но включает только числа меньше 10. Если число равно 10 или больше, выполнение переходит к началу цикла, и число не добавляется к сумме.
sum = 0
while True:
number = int(input("Please type in a number, -1 to exit: "))
if number == -1:
break
if number >= 10:
continue
sum += number
print (f"The sum is {sum}")Please type in a number, -1 to exit: 4 Please type in a number, -1 to exit: 7 Please type in a number, -1 to exit: 99 Please type in a number, -1 to exit: 5 Please type in a number, -1 to exit: -1 The sum is 16
Вложенные циклы
Так же как инструкции if, циклы можно помещать внутрь других циклов. Например, следующая программа использует цикл, чтобы просить пользователя вводить числа. Затем внутри первого цикла она использует еще один цикл, чтобы вывести обратный отсчет от заданного числа до 1:
while True:
number = int(input("Please type in a number: "))
if number == -1:
break
while number > 0:
print(number)
number -= 1Please type in a number: 4 4 3 2 1 Please type in a number: 3 3 2 1 Please type in a number: 6 6 5 4 3 2 1 Please type in a number: -1
Когда циклы вложены, команды break и continue влияют только на самый внутренний цикл, частью которого они являются. Предыдущий пример можно было бы записать и так:
while True:
number = int(input("Please type in a number: "))
if number == -1:
break
while True:
if number <= 0:
break
print(number)
number -= 1Здесь последняя команда break останавливает только самый внутренний цикл, который используется для вывода чисел.
Больше вспомогательных переменных с циклами
Мы уже много раз использовали вспомогательные переменные, которые увеличиваются или уменьшаются на каждой итерации цикла, поэтому следующая программа должна выглядеть довольно знакомо по структуре. Программа выводит все четные числа больше нуля, пока не достигнет предела, заданного пользователем:
limit = int(input("Please type in a number: "))
i = 0
while i < limit:
print(i)
i += 2Please type in a number: 8 0 2 4 6
Вспомогательной переменной i присваивается 0 перед циклом, и она увеличивается на два при каждой итерации.
Использование вложенных циклов иногда требует отдельной вспомогательной переменной для внутреннего цикла. Программа ниже выводит "числовую пирамиду" на основе числа, заданного пользователем:
number = int(input("Please type in a number: "))
while number > 0:
i = 0
while i < number:
print(f"{i} ", end="")
i += 1
print()
number -= 1Please type in a number: 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
В этой программе внешний цикл использует вспомогательную переменную number, которая уменьшается на 1 на каждой итерации, пока не достигнет 0. Вспомогательной переменной i присваивается 0 непосредственно перед входом во внутренний цикл, каждый раз при повторении внешнего цикла.
Внутренний цикл использует вспомогател ьную переменную i, которая увеличивается на 1 при каждой итерации внутреннего цикла. Внутренний цикл повторяется, пока i не станет равным number, и выводит каждое значение i на той же строке, разделяя значения пробелом. Когда внутренний цикл заканчивается, команда print во внешнем цикле начинает новую строку.
Теперь помните, что при каждой итерации внешнего цикла значение number уменьшается, поэтому количество повторений внутреннего цикла тоже уменьшается. С каждым повторением строка чисел становится короче, и так получается форма пирамиды.
Вложенные циклы могут быстро запутать, но понимать, как они работают, необходимо. Возможно, инструмент визуализации Python Tutor поможет вам понять, как работает этот пример. Скопируйте код выше в окно кода инструмента и следите за формированием вывода и изменением значений вспомогательных переменных по мере выполнения.
Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.