Цикл while
(“пока”) позволяет выполнить
одну и ту же последовательность действий, пока проверяемое условие истинно.
Условие записывается до тела цикла и проверяется до выполнения тела цикла.
Как правило, цикл while
используется, когда невозможно
определить точное значение количества проходов исполнения цикла.
Синтаксис цикла while
в простейшем случае выглядит так:
while условие: блок инструкций
При выполнении цикла while
сначала проверяется условие.
Если оно ложно, то выполнение цикла прекращается и управление
передается на следующую инструкцию после тела цикла while
.
Если условие истинно, то выполняется инструкция, после чего условие
проверяется снова и снова выполняется инструкция.
Так продолжается до тех пор, пока условие будет истинно.
Как только условие станет ложно, работа цикла завершится и
управление передастся следующей инструкции после цикла.
Например, следующий фрагмент программы напечатает на экран
квадраты всех целых чисел от 1 до 10. Видно, что цикл
while
может заменять цикл for ... in range(...)
:
i = 1 while i <= 10: print(i) i += 1
В этом примере переменная i
внутри цикла изменяется от 1 до 10.
Такая переменная, значение которой меняется с каждым новым проходом цикла,
называется счетчиком. Заметим, что после выполнения этого фрагмента
значение переменной i
будет равно 11
,
поскольку именно при i==11
условие i<=10
впервые
перестанет выполняться.
Вот еще один пример использования цикла while
для определения количества цифр натурального числа n
:
n = int(input()) length = 0 while n > 0: n //= 10 length += 1
В этом цикле мы отбрасываем по одной цифре числа, начиная с конца,
что эквивалентно целочисленному делению на 10 (n //= 10
),
при этом считаем в переменной length
, сколько раз это было сделано.
В языке Питон есть и другой способ решения этой задачи:
.
После тела цикла можно написать слово else:
и после него блок операций, который будет
выполнен один раз после окончания цикла, когда проверяемое
условие станет неверно:
i = 1 while i <= 10: print(i) i += 1 else: print('Цикл окончен, i =', i)
Казалось бы, никакого смысла в этом нет, ведь эту же инструкцию можно
просто написать после окончания цикла. Смысл появляется только
вместе с инструкцией break
, использование которой внутри цикла
приводит к немедленному прекращению цикла, и при этом не исполняется ветка
else
. Разумеется, инструкцию break
осмыленно
вызывать только из инструкции if
, то есть она должна выполняться
только при выполнении какого-то особенного условия.
Другая инструкция управления циклом —
continue
(продолжение цикла). Если эта инструкция
встречается где-то посередине цикла, то пропускаются все оставшиеся
инструкции до конца цикла, и исполнение цикла продолжается
со следующей итерации.
Инструкции break
, continue
и ветка
else:
можно использовать и внутри цикла for
.
Тем не менее, увлечение инструкциями break
и continue
не поощряется, если можно обойтись без их использования. Вот типичный пример
плохого использования инструкции break
.
while True: length += 1 n //= 10 if n == 0: break
По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастания.
Ввод | Вывод |
---|---|
50 |
1 4 9 16 25 36 49 |
Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1.
Ввод | Вывод |
---|---|
15 |
3 |
По данному числу N распечатайте все целые степени двойки, не превосходящие N, в порядке возрастания.
Операцией возведения в степень пользоваться нельзя!
Ввод | Вывод |
---|---|
50 |
1 2 4 8 16 32 |
Дано натуральное число N. Выведите слово YES
, если число N является
точной степенью двойки, или слово NO
в противном случае.
Операцией возведения в степень пользоваться нельзя!
Ввод | Вывод |
---|---|
8 |
YES |
3 |
NO |
По данному натуральному числу N выведите такое наименьшее целое число k, что 2k≥N.
Операцией возведения в степень пользоваться нельзя!
Ввод | Вывод |
---|---|
7 |
3 |
В первый день спортсмен пробежал x километров, а затем он каждый день увеличивал пробег на 10% от предыдущего значения. По данному числу y определите номер дня, на который пробег спортсмена составит не менее y километров.
Программа получает на вход действительные числа x и y и должна вывести одно натуральное число.
Ввод | Вывод |
---|---|
10 |
9 |
Эта задача является необязательной
Вклад в банке составляет x рублей. Ежегодно он увеличивается на p процентов, после чего дробная часть копеек отбрасывается. Определите, через сколько лет вклад составит не менее y рублей.
Программа получает на вход три натуральных числа: x, p, y и должна вывести одно целое число.
Ввод | Вывод |
---|---|
100 |
8 |