Цикл while
ПОКА
Цикл while (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.
Синтаксис цикла while в простейшем случае выглядит так:
while условие:
блок инструкций
При выполнении цикла while сначала проверяется условие. Если оно ложно, то выполнение цикла прекращается и управление передается на следующую инструкцию после тела цикла while. Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла.
Например, следующий фрагмент программы напечатает на экран квадраты всех целых чисел от 1 до 10. Видно, что цикл while может заменять цикл for ... in range(...):
i = 1
while i <= 10:
print(i * 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))./p>
Инструкции управления циклом
После тела цикла можно написать слово 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
Задача №3642. Список квадратов
По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастания.
Входные данные
Вводится натуральное число.
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
50 | 1 4 9 16 25 36 49 |
Решение
x = int(input())
i = 1
while i * i <= x:
print(i * i, end=' ')
i += 1
Задача №3643. Минимальный делитель
Дано целое число, не меньшее 2. Выведите его наименьший простой делитель.
Входные данные
Вводится целое положительное число N ≤ 2 ∗ 109.
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
15 | 3 |
Решение
n = int(input())
i = 2
while i * i <= n:
if n % i == 0:
print(i)
break
i += 1
if i * i > n:
print(n)
Задача №3644. Список степеней двойки
По данному числу N распечатайте все целые степени двойки, не превосходящие N, в порядке возрастания.
Операцией возведения в степень пользоваться нельзя!
Входные данные
Вводится натуральное число.
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
50 | 1 2 4 8 16 32 |
Решение
n = int(input())
i = 1
while i <= n:
print(i)
i *= 2
Задача №3645. Точная степень двойки
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.
Операцией возведения в степень пользоваться нельзя!
Входные данные
Вводится натуральное число.
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
3 | NO |
Ввод | Вывод |
8 | YES |
Решение
n = int(input())
i = 1
while i < n:
i = i * 2
if i == n:
print("YES")
else:
print("NO")
Задача №3646. Двоичный логарифм
По данному натуральному числу N выведите такое наименьшее целое число k, что 2k ≥ N.
Операцией возведения в степень пользоваться нельзя!
Входные данные
Вводится натуральное число.
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
7 | 3 |
Решение
n = int(input())
i = 1
k = 0
while i < n:
k += 1
i *= 2
else:
print(k)
Задача №3647. Утренняя пробежка
В первый день спортсмен пробежал x километров, а затем он каждый день увеличивал пробег на 10% от предыдущего значения. По данному числу y определите номер дня, на который пробег спортсмена составит не менее y километров.
Входные данные
Программа получает на вход действительные числа x и y
Выходные данные
Программа должна вывести одно натуральное число.
Примеры
Ввод | Вывод |
10 20 |
9 |
Решение
x = int(input())
y = int(input())
d = 1
while x < y:
x = x * 1.1
d += 1
print(d)
Задача №3648. Банковские проценты
Вклад в банке составляет x рублей. Ежегодно он увеличивается на p процентов, после чего дробная часть копеек отбрасывается. Определите, через сколько лет вклад составит не менее y рублей.
Входные данные
Программа получает на вход три натуральных числа: x, p, y.
Выходные данные
Программа должна вывести одно целое число.
Примеры
Ввод | Вывод |
100 10 200 |
8 |
Решение
x = int(input()) * 100
p = int(input())
y = int(input()) * 100
i = 0
while x < y:
x += int(p * x / 100)
i += 1
print(i)
Задача №3649. Длина последовательности
Программа получает на вход последовательность целых неотрицательных чисел, каждое число записано в отдельной строке. Последовательность завершается числом 0, при считывании которого программа должна закончить свою работу и вывести количество членов последовательности (не считая завершающего числа 0).
Числа, следующие за числом 0, считывать не нужно.
Входные данные
Вводится последовательность целых чисел, заканчивающаяся числом 0.
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
1 7 9 0 5 |
3 |
Решение
elem = int(input())
count = 0
s = 0
while elem != 0:
s += elem
count += 1
elem = int(input())
print(count)
Задача №3650. Сумма последовательности
Определите сумму всех элементов последовательности, завершающейся числом 0.
Входные данные
Вводится последовательность целых чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак ее окончания).
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
1 7 9 0 |
17 |
Решение
ele = int(input())
z = 0
while ele != 0:
z += ele
ele = int(input())
print(z)
Задача №3651. Среднее значение последовательности
Определите среднее значение всех элементов последовательности, завершающейся числом 0.
Использовать массивы в данной задаче нельзя.
Входные данные
Вводится последовательность целых чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак ее окончания).
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
1 7 9 0 |
5.66666666667 |
Решение
elem = int(input())
count = 0
s = 0
while elem != 0:
s += elem
count += 1
elem = int(input())
print(s / count)
Задача №3652. Количество четных элементов последовательности
Определите количество четных элементов в последовательности, завершающейся числом 0.
Входные данные
Вводится последовательность целых чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак ее окончания).
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
2 1 4 0 |
2 |
Решение
ele = -1
count = 0
while ele != 0:
ele = int(input())
if ele % 2 == 0 and ele != 0:
count += 1
print(count)
Задача №3653. Максимум последовательности
Последовательность состоит из натуральных чисел, не превосходящих 109, и завершается числом 0. Определите значение наибольшего элемента последовательности.
Входные данные
Вводится последовательность целых чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак ее окончания).
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
1 7 9 0 |
9 |
Решение
a = -1
m = 0
while a != 0:
a = int(input())
if a >= m:
m = a
print(m)
Задача №3654. Количество элементов, которые больше предыдущего
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности больше предыдущего элемента.
Входные данные
Вводится последовательность целых чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак ее окончания).
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
1 7 9 0 |
2 |
Решение
elem = int(input())
i = 0
while elem != 0:
f = int(input())
if f != 0 and elem < f:
i += 1
elem = f
print(i)
Задача №3655. Второй максимум
Последовательность состоит из различных натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой последовательности.
Входные данные
Вводится последовательность целых чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак ее окончания).
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
1 7 9 0 |
7 |
Решение
max1 = 0
max2 = 0
elem = int(input())
while elem != 0:
if elem > max1:
max2 = max1
max1 = elem
elif elem > max2:
max2 = elem
elem = int(input())
print(max2)
Задача №3659. Числа Фибоначчи
Последовательность Фибоначчи определяется так:
φ0 = 0, φ1 = 1, ..., φn = φn − 1 + φn − 2.
По данному числу n определите n-е число Фибоначчи φn.
Входные данные
Вводится натуральное число n.
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
6 | 8 |
Решение
n = int(input())
a = 0
b = 1
count = 0
s = 0
if n == 0:
print(0)
elif n == 1:
print(1)
elif n > 1:
while count != n - 1:
s = a + b
a, b = b, s
count += 1
print(s)
Задача №3660. Номер числа Фибоначчи
Последовательность Фибоначчи определяется так:
φ0 = 0, φ1 = 1, ..., φn = φn − 1 + φn − 2.
Дано натуральное число A. Определите, каким по счету числом Фибоначчи оно является, то есть выведите такое число n, что φn = A.
Если А не является числом Фибоначчи, выведите число -1.
Входные данные
Вводится натуральное число A.
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
8 | 6 |
Ввод | Вывод |
10 | -1 |
Решение
f = 0
f1 = 1
f2 = 0
i = 0
a = int(input())
while f <= a:
f = f1 + f2
f1, f2 = f, f1
i += 1
if a == f2:
print(i)
else:
print(-1)
Задача №3664. Количество локальных максимумов
Элемент последовательности называется локальным максимумом, если он строго больше предыдущего и последующего элемента последовательности. Первый и последний элемент последовательности не являются локальными максимумами.
Использовать массивы в данной задаче нельзя.
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите количество строгих локальных максимумов в этой последовательности.
Входные данные
Вводится последовательность целых чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак ее окончания).
Выходные данные
Выведите ответ на задачу.
Примеры
Ввод | Вывод |
1 2 1 2 1 0 |
2 |
Решение
elem = int(input())
prev1 = elem
prev2 = elem
count = 0
while elem != 0:
if prev1 > prev2 and prev1 > elem:
count += 1
prev2 = prev1
prev1 = elem
elem = int(input())
print(count)