Цикл 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, мы исполняем тело цикла. В тело цикла входит две команды:
- напечатать квадрат введенного числа;
- считать следующее число.
Важным являются два момента:
- правильная инициализация переменной
num
;
- изменение переменной
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
работает до тех пор пока в числе есть необработанные цифры. Тело цикла содержит:
- процедуру получения последней цифры
last_digit = n % 10
;
- код обработки последней цифры;
- процедуру удаления последней цифры из числа
n = n // 10
.
В качестве процедуры обработки может быть все, что угодно: вывод цифр, нахождение суммы, произведения цифр, нахождение наибольшей или наименьшей цифры, подсчет цифр удовлетворяющих некоторому условию и т.д.