1. Циклы. Цикл while

☰ Теория

Цикл while

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

Структура цикла while в Python выглядит так:

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

Двоеточие (:) в конце строки с инструкцией while сообщает Python, что дальше находится блок команд. В блок входят все строки, расположенные с отступом от строки с инструкцией while, вплоть до следующей строки без отступа.

Блок команд, который выполняется в цикле while, называется телом цикла.

Рассмотрим код, использующий цикл while, который распечатает 10 раз слово Привет:

i = 0
while i < 10:
    print('Привет')
    i += 1

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

Напишем программу, которая считывает числа и выводит их квадраты, пока не будет введено −1. При такой постановке задачи мы не можем воспользоваться циклом for, так как не знаем, сколько чисел будет предшествовать числу −1.

num = int(input())
while num != -1:
    print('Квадрат вашего числа равен:', num * num)
    num = int(input())

В качестве начального значения переменной num, мы используем первое из чисел. Далее, пока выполняется условие цикла, а именно пока введенное число не равно −1, мы исполняем тело цикла. В тело цикла входит две команды:

  1. напечатать квадрат введенного числа;
  2. считать следующее число. 

Важным являются два момента:

  1. правильная инициализация переменной num;
  2. изменение переменной num внутри цикла while.


ВАЖНО!
Если не изменять переменную num внутри цикла, то можно получить так называемый бесконечный цикл, который будет выполняться бесконечно много раз.

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

 

Цикл for против цикла while

Мы всегда можем заменить цикл for с помощью цикла while. Следующие две программы выводят числа от 0 до 100:

 

# используем for
for i in range(101):
    print(i)

 

# используем while
i = 0
while i < 101:
    print(i)
    i += 1

 

В первом цикле переменная i последовательно принимает значения от 0 до 100. Для цикла while нам пришлось завести самостоятельно переменную i и придать ей начальное значение. Тело цикла while содержит аналогичную инструкцию вывода print(i), однако помимо этого мы самостоятельно увеличиваем значение переменной i на 11, что делается автоматически в случае с циклом for.
 

Считывание данных до стоп значения

Часто при решении задач на цикл while мы считываем данные до тех пор, пока пользователь не введет некоторое значение, которое называют стоп значением. Напишем программу, которая считывает числа и находит их сумму до тех пор, пока пользователь не введет слово stop:

text = input()
total = 0
while text != 'stop':
    total += int(text)
    text = input()

print('Сумма чисел равна', total)

Бесконечный цикл

Всегда кроме редких случаев цикл while должен содержать возможность завершиться. То есть в цикле что-то должно сделать проверяемое условие ложным. Если цикл не имеет возможности завершиться, то он называется бесконечным циклом. Бесконечный цикл продолжает повторяться до тех пор, пока программа не будет прервана. Бесконечные циклы обычно появляются, когда программист забывает написать программный код внутри цикла, который делает проверяемое условие ложным. В большинстве случаев следует избегать применения бесконечных циклов.

Пример бесконечного цикла:

i = 0
total = 0
while i < 10:
    total += i

Так как в теле цикла не происходит изменения переменной i, то условие i < 10 остается истинным и цикл выполняется бесконечно много раз.
 

Полезные операторы

Иногда бывает нужно прервать выполнение цикла преждевременно. Оператор break прерывает ближайший цикл for или while.
Оператор continue позволяет перейти к следующей итерации цикла for или while до завершения всех команд в теле цикла.
 

Пример работы с цифрами числа

Программу, которая считывает натуральное число (целое положительное) и обрабатывает его цифры.

n = int(input())
while n != 0:  # пока в числе есть цифры
    last_digit = n % 10  # получить последнюю цифру
    # код обработки последней цифры
    n = n // 10  # удалить последнюю цифру из числа

Цикл while работает до тех пор пока в числе есть необработанные цифры. Тело цикла содержит:

  1. процедуру получения последней цифры last_digit = n % 10;
  2. код обработки последней цифры;
  3. процедуру удаления последней цифры из числа n = n // 10.

В качестве процедуры обработки может быть все, что угодно: вывод цифр, нахождение суммы, произведения цифр, нахождение наибольшей или наименьшей цифры, подсчет цифр удовлетворяющих некоторому условию и т.д.

Что покажет приведенный ниже фрагмент кода?

num = 123456789
total = 0
while num != 0:
    last_digit = num % 10
    if last_digit > 4:
        total += 1

    num = num // 10

print(total)

Ваш ответ Для проверки решения задачи необходимо зарегистрироваться или авторизоваться!

Выберите правильный ответ, либо введите его в поле ввода

Комментарий учителя