Part 3

Больше о циклах

Команда 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. Она заставляет выполнение цикла сразу перейти к началу цикла, где находится условие. Затем выполнение продолжается обычным образом с проверки условия:

3 3 1

Например, следующая программа суммирует числа из ввода, но включает только числа меньше 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 -= 1
Пример вывода

Please 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 += 2
Пример вывода

Please 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 -= 1
Пример вывода

Please 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 поможет вам понять, как работает этот пример. Скопируйте код выше в окно кода инструмента и следите за формированием вывода и изменением значений вспомогательных переменных по мере выполнения.

Вы дошли до конца этого раздела! Перейти к следующему разделу:

Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.