6.Условный цикл

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

Блок кода внутри цикла while будет повторятся до тех пор, пока условие цикла выполняется: i = 10
while i > 0:
print("Hey")
i -= 1

Данный код выведет на экран "Hey" 10 раз, после чего i будет равняться 0, условие уже не будет выполняться, работа цикла завершится.

Мы могли бы заменить этот код, используя цикл for, т.к. мы знаем сколько раз нам необходимо вывести приветствие, но так бывает не всегда.

Напишем программу, которая считывает числа и выводит их квадраты, пока не будет введено -1. При такой постановке задачи мы не можем воспользоваться циклом for, так как не знаем сколько чисел будет предшествовать числу -1. num = int(input())
while num != -1:
print('Квадрат вашего числа равен:', num ** 2)
num = int(input())

При работе с while важным являются два момента:

  1. правильная инициализация переменной num;
  2. изменение переменной num внутри цикла while.
Если не изменять переменную num внутри цикла, то можно получить так называемый бесконечный цикл, который будет выполняться бесконечно много раз.

Мы всегда можем заменить цикл 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 на 1, что делается автоматически в случае с циклом for.

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

Часто при решении задач на цикл while, мы считываем данные, до тех пор пока пользователь не введет некоторое значение, которое называют стоп значением. Напишем программу, которая считывает числа и находит их сумму, до тех пор пока пользователь не введет слово stop: text = input()
total = 0
while text != 'stop':
num = int(text)
total += num
text = input()
print('Сумма чисел равна', total)

В случае с while мы можем применить констуркции break, continue, else, работать они будут так же как с циклом for.

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

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

Пример бесконечного цикла: i = 0
total = 0
while i < 10:
total += i
Так как в теле цикла не происходит изменения переменной i, то условие i < 10 остается истинным и цикл выполняется бесконечно много раз. Поэтому необходимо либо изменять переменную i, либо добавить внутри блока кода условие, при котором цикл прервется с помощью break.

Обработка цифр числа

В одном из прошлых уроков мы говорили про операцию целочисленного деления // и операцию нахождения остатка от деления одного целого числа на другое %. Используя цикл while и две данных операции, можно обработать цифры числа с произвольным количеством разрядов (цифр).

Пусть дано натуральное число n. Тогда:

  • результатом операции n % 10 – является последняя цифра числа;
  • результатом операции n // 10 – является число с удаленной последней цифрой.
Напишем программу, которая считывает натуральное число (целое положительное) и обрабатывает его цифры: n = int(input())
while n != 0: # пока в числе есть цифры
last_digit = n % 10 # получить последнюю цифру
# код обработки последней цифры
n = n // 10 # удалить последнюю цифру из числа

Например, введем число 143, а в строку с комментарием # код обработки последней цифры напишем print(last_digit) n = int(input()) # вводим 143
while n != 0: # пока в числе есть цифры
last_digit = n % 10 # получить последнюю цифру
print(last_digit) # код обработки последней цифры
n = n // 10 # удалить последнюю цифру из числа
Вывод:
1
4
3