Статья Автор: Александр Ф. Алейников

5.3 Цикл while

Цикл while

В предыдущих уроках мы говорили о цикле for, который выполнялся известное количество раз. Но в некоторых задачах это значение нам заранее неизвестно. Для их решения нам понадобится цикл while (while - "пока" в переводе с английского), который работает до тех пор, пока заданное условие истинно.

Структура цикла while следующая:

while условие:
    блок кода

Рассмотрим программу, которая 5 раз выводит на экран Python для ЕГЭ:

for i in range(5):
    print('Python для ЕГЭ')

С помощью цикла while можно задать ту же самую логику:

i = 0
while i < 5:
    print("Python для ЕГЭ")
    i += 1

Обратите внимание на то, что если в цикле for переменная i меняется автоматически, то в цикле while нам приходится прописывать эти изменения вручную.

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

Рассмотрим задачу:

Необходимо считать с клавиатуры неизвестное количество чисел и найти их сумму, а признаком окончания ввода является 0.

Программа для решения этой задачи может выглядеть так:

s = 0
num = int(input())
while num != 0:
    s += num
    num = int(input())
print(s)

В конструкции

while num != 0:
    s += num
    num = int(input())

блок команд  внутри цикла выполняется до тех пор, пока условие истинно, в данном случае пока num не равен нулю:

  1. сначала выполняется проверка условия num != 0
  2. если условие истинно (т.е. num не равен нулю), к s прибавляется значение num
  3. в num "считывается" очередное число
  4. шаги 1-3 повторяются до тех пор, пока условие истинно (т.е. пока не будет введён 0)

Строка перед циклом

num = int(input())

необходима для считывания первого числа. Без неё переменная num не определена, и потому при выполнении условия num != 0 произойдет ошибка.

Обратите внимание на то, что количество итераций в цикле while будет зависеть от того, сколько раз выполнится условие.

Возможна ситуация, в которой цикл while не выполнится ни разу:

a = 10
while a > 20:
    print("Этот текст никогда не выведется")

Здесь условие a > 20 не выполнится, поэтому заход в тело цикла не произойдет.

А в приведенном ниже случае цикл while будет выполняться бесконечно:

i = 0
while i < 10:
    print(i)

поскольку i никак в теле цикла не меняется, и потому условие i < 10 будет всегда истинно.

Оператор break можно использовать и при работе с циклом while.

Приведённый ниже код:

num = 1
while num ** 2 < 50:
    print(num ** 2)
    num += 1
    if num == 6:
        break

выведет квадраты чисел от 1 до 5 включительно. Квадраты чисел 6 и 7 не будут выведены, поскольку оператор break досрочно прервет выполнение цикла при num = 6.

Печать