Цикл while в питоне

Цикл 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, сколько раз это было сделано.

В языке Питон есть и другой способ решения этой задачи: length = len(str(i)).

Инструкции управления циклом

После тела цикла можно написать слово 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

Упражнения

A: Список квадратов

По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастания.

50
1 4 9 16 25 36 49
IDE

B: Минимальный делитель

Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1.

15
3
IDE

C: Список степеней двойки

По данному числу N распечатайте все целые степени двойки, не превосходящие N, в порядке возрастания.

Операцией возведения в степень пользоваться нельзя!

50
1 2 4 8 16 32
IDE

D: Точная степень двойки

Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.

Операцией возведения в степень пользоваться нельзя!

8
YES
3
NO
IDE

E: Двоичный логарифм

По данному натуральному числу \(N\) выведите такое наименьшее целое число \(k\), что \(2^k\ge N\).

Операцией возведения в степень пользоваться нельзя!

7
3
IDE

F: Утренняя пробежка

В первый день спортсмен пробежал \(x\) километров, а затем он каждый день увеличивал пробег на 10% от предыдущего значения. По данному числу \(y\) определите номер дня, на который пробег спортсмена составит не менее \(y\) километров.

Программа получает на вход действительные числа \(x\) и \(y\) и должна вывести одно натуральное число.

10 20
9
IDE

G: Банковские проценты

Вклад в банке составляет \(x\) рублей. Ежегодно он увеличивается на \(p\) процентов, после чего дробная часть копеек отбрасывается. Определите, через сколько лет вклад составит не менее \(y\) рублей.

Программа получает на вход три натуральных числа: \(x\), \(p\), \(y\) и должна вывести одно целое число.

100 10 200
8
IDE

H: Длина последовательности

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

Числа, следующие за числом 0, считывать не нужно.

1 7 9 0 5
3
IDE

J: Среднее значение последовательности

Определите среднее значение всех элементов последовательности, завершающейся числом 0.

1 7 9 0
5.666666666666667
IDE

L: Максимум последовательности

Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение наибольшего элемента последовательности.

1 7 9 0
9
IDE

M: Количество элементов, которые больше предыдущего элемента последовательности

Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности больше предыдущего элемента.

1 7 9 0
2
IDE

O: Второй максимум - 2

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

1 7 9 0
7
1 2 2 1 0
2
IDE

P: Количество элементов, равных максимуму

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

1 7 9 0
1
1 3 3 1 0
2
IDE

Q: Сумма последовательности - 2

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

1 7 0 9 0 0 5
17
IDE

R: Числа Фибоначчи

Последовательность Фибоначчи определяется так: \[ \varphi_0=0, \varphi_1=1, ..., \varphi_{n}=\varphi_{n-1}+\varphi_{n-2}. \]

По данному числу \(n\ge 1\) определите \(n\)-е число Фибоначчи \(\varphi_n\).

6
8
IDE

S: Номер числа Фибоначчи

Дано натуральное число \(A\). Определите, каким по счету числом Фибоначчи оно является, то есть выведите такое число \(n\), что \(\varphi_n=A\). Если \(A\) не является числом Фибоначчи, выведите число -1.

8
6
10
-1
IDE

T: Исполнитель «Раздвоитель»

Исполнитель «Раздвоитель» преобразует натуральные числа. У него есть две команды: «Вычесть 1» и «Разделить на 2», первая команда уменьшает число на 1, вторая команда уменьшает число в два раза, если оно чётное, иначе происходит ошибка.

Дано два натуральных числа A и B (A>B). Напишите алгоритм для Развоителя, который преобразует число A в число B и при этом содержит минимальное число команд. Команды алгоритма нужно выводить по одной в строке, первая команда обозначается, как -1, вторая команда как :2.

179 20
-1 :2 -1 :2 :2 -1 -1
IDE

U: Контрольная работа

8Б1 класс написал контрольную работу. В результате ровно A% учащихся получили 5, ровно B% — 4, ровно C% — 3, а остальные D% написали её на 2. Какое минимальное количество школьников должно быть в классе для того, чтобы могли получиться такие результаты?

Вводятся 4 целых числа от 0 до 100 — \(A\), \(B\), \(C\), \(D\) (\(A+B+C+D=100\)).

40 50 5 5
20
IDE

V: Максимальное число идущих подряд одинаковых элементов

Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу.

1 7 7 9 1 0
2
IDE

W: Максимальная длина монотонного фрагмента последовательности

Дана последовательность натуральных чисел, завершающаяся число 0. Определите наибольшую длину монотонного фрагмента последовательности (то есть такого фрагмента, где все элементы либо больше предыдущего, либо меньше).

1 7 7 9 1 0
2
IDE

X: Количество локальных максимумов последовательности

Элемент последовательности называется локальным максимумом, если он строго больше предыдущего и последующего элемента последовательности. Первый и последний элемент последовательности не являются локальными максимумами.

Дана последовательность натуральных чисел, завершающаяся числом 0. Определите количество строгих локальных максимумов в этой последовательности.

1 2 1 2 1 0
2
IDE

Y: Наименьшее расстояние между двумя строгими локальными максимумами

Определите наименьшее расстояние между двумя локальными максимумами последовательности натуральных чисел, завершающейся числом 0. Если в последовательности нет двух локальных максимумов, выведите число 0.

1 2 1 1 2 1 2 1 0
2
1 2 3 0
0
IDE

Z: Стандартное отклонение

Дана последовательность натуральных чисел \(x_1\), \(x_2\), ..., \(x_n\). Стандартным отклонением называется величина \[ \sigma = \sqrt{\frac{(x_1-s)^2+(x_2-s)^2+\ldots+(x_n-s)^2}{n-1}} \] где \(s=\frac{x_1+x_2+\ldots+x_n}{n}\) — среднее арифметическое последовательности.

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

1 7 9 0
4.16333199893
IDE

ZA★: Книга

Новое издание романа «Война и мир» издано в одном томе. При этом на первых трех страницах тома номера страниц не стоят, а пронумерованные страницы начинаются с 4-й (при этом на этой 4-й странице стоит номер 4, на следующей — 5, и так далее). Всего для нумерации всех страниц ушло \(N\) цифр.

Определите, сколько всего страниц в новом издании «Войны и мира».

Вводится одно натуральное число \(N\) (\(1 \le N \le 10000\)) — количество цифр, которое потребовалось для нумерации страниц книги.

Выведите количество страниц в книге. Гарантируется, что ответ всегда существует.

1
4
10
11
IDE

ZB★: Бесконечная таблица

Натуральные числа записаны в (бесконечную) таблицу, как показано на рисунке:

Требуется по заданному числу вывести всех его соседей (числа, записанные в клетках сверху, справа, слева и снизу, если таковые имеются)

Вводится одно натуральное число.

Программа должна вывести все числа, записанные в соседних клетках с данным, в порядке возрастания.

1
3
7
3 6 8 13
10
11 18
IDE

ZC★★: Сумма цифр

Подсчитайте количество натуральных чисел на отрезке от \(A\) до \(B\), сумма цифр которых четна.

Вводится два натуральных числа \(A\) и \(B\), \(1\le A\le B\le 10^9\).

Выведите одно число — количество чисел, больших либо равных \(A\) и меньших либо равных \(B\), имеющих четную сумму цифр.

1 5
2
10 10
0
IDE