Цикл while (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.
i = 0
while i < 5:
print(i)
i += 1
# Вывод:
>>> 0
>>> 1
>>> 2
>>> 3
>>> 4
Цикл while и цикл for имеют схожую структуру, НО есть одно важное различие - цикл while может быть бесконечным.
i = 0
while True:
print(i)
i += 1
# Вывод:
>>> 0
>>> 1
>>> 2
>>> 3
>>> 4
# Это может продолжаться долго...
Код выше будет бесконечно печатать возрастаютщую последовательность чисел.
Цикл while можно сравнить с цикличным условным оператором.
text = 'Hello world'
i = 0
while i < len(text):
print(text[i])
i += 1
# Вывод:
>>> H
>>> e
>>> l
>>> l
>>> o
>>>
>>> w
>>> o
>>> r
>>> l
>>> d
Код, приведенный выше, печатает строку посимвольно. Приведу пример аналогичного цикла for:
text = 'Hello world'
for i in text:
print(i)
# Вывод:
>>> H
>>> e
>>> l
>>> l
>>> o
>>>
>>> w
>>> o
>>> r
>>> l
>>> d
Более того, я приведу даже два цикла for!
text = 'Hello world'
for i in range(len(text)):
print(text[i])
Напомню, что отличие между двумя, приведенными выше примерами, в следующем: первый цикл проходит по элементам последовательности (в нашем случае строки), а второй — по ее индексам. Здесь также используется функция len(), которая позволяет узнать длину последовательности.
Вернемся к циклу while. Цикл while, как и цикл for, можно остановить с помощью специальной управлющей конструкции break.
j = 0
while True:
if j == 3:
print('Выход из цикла')
break
print(j)
j += 1
# Вывод:
>>> 0
>>> 1
>>> 2
>>> Выход из цикла
Конструкция break прерывает цикл. Она очень похожа на обычное условие после ключевого слова while.
Так же есть еще одна управляющая конструкция - continue. С ее помощью мы можем не выпонять текущую итерацию (повторение) цикла и перейти сразу к следующему.
j = 0
while j < 5:
j += 1
if j == 3:
print('Пропускаем j == 3')
continue
print(j)
# Вывод:
>>> 1
>>> 2
>>> Пропускаем j == 3
>>> 4
>>> 5
Как и для цикла for, для цикла while мы можем записать конструкцию else.
from random import randint
j = 0
element = randint(0, 15)
while j < 10:
j += 1
if j == element:
print('Нашли element, он равен', element)
break
else:
print('Неудачная попытка')
Возведение числа в степень с помощью цикла while
n = int(input()) # число
k = int(input()) # степень
i = 1 # текущая степень
result = 1
while i <= k:
result *= n
i += 1
print(result)
Сумма последовательности с помощью цикла while
n = int(input())
result = 0
i = 0
while i <= n:
result += i
i += 1
print(result)
Ввод последовательности чисел
i = 0
while True:
n = input()
if n == 'end':
print('Ввод закончен')
print('Было введено', i, 'чисел')
break
n = int(n)
i += 1
Сумма введенных чисел
i = 0
summa = 0
while True:
n = input()
if n == 'end':
print('Ввод закончен')
print('Было введено', i, 'чисел')
print('Их сумма равна', summa)
break
n = int(n)
summa += n
i += 1
1. Дано положительное число N. Вывести все числа от 0 до N с помощью цикла while.
2. Дано положительное число N. Вывести все числа от N до 0 с помощью цикла while. Пример:
Ввод: N = 10
Вывод: 10
9
8
7
6
...
0
3. Даны два положительных числа K и N (K < N). Вывести все числа от K до N с помощью цикла while.
4. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A (взятие остатка A % B)
5. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A (деление нацело A // B)
6. Дано положительное число N. Найти сумму всех четных чисел от 0 до N с помощью цикла while.
7. Даны два положительных числа K и N (K < N). Найти сумму всех нечетных чисел от K до N с помощью цикла while.
8. Дано положительное число N. Найти факториал числа N. Факториалом числа называется произведение всех чисел от 1 до N. Например, факториал числа 5 равен 5! = 1*2*3*4*5 = 120, 2! = 1*2 = 2, 9! = 1*2*3*4*5*6*7*8*9 = 362880
9. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести YES, если не является - вывести NO.
10. Дано целое число N (> 0). Найти двойной факториал N: N!! = N * (N-2) * (N-4)* .... Для решения этой задачи посмотрите на задачу 2
1. Дано целое число N (> 1). Найти наименьшее целое число K, при котором выполняется неравенство 3^K > N, где 3^K - это 3 в степени K или число 3, умноженное само на себя K раз. Например, 3^5 = 3*3*3*3*3. Ответом в задаче будет первая степень числа 3, которая больше, чем заданное число N. Например, если N=41, распишем степени числа три: 3^1 = 3; 3^2 = 3*3 = 9; 3^3 = 3*3*3 = 27; 3^4 = 3*3*3*3 = 27 * 3 = 81;. Таким образом, первая степень, в которую возвести число 3, превышающая число N - это 4.
В этой задаче нужно выполнять цикл while, пока остаток от деления на число три равен 0
2. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, вывести все его цифры, начиная с самой правой (разряда единиц).
Перед решением этой задачи вспомните, как найти сумму цифр трехначного числа.
3. Даны целые положительные числа A и B. Найти их наибольший общий делитель (НОД), используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B = 0; НОД(A, 0) = A.
4. Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0 < P < 50). По данному P определить, после какого дня суммарный пробег лыжника за все дни превысит 200 км, и вывести найденное количество дней K (целое) и суммарный пробег S (вещественное число).
5. Дано целое число N (> 1). Последовательность чисел Фибоначчи FK определяется следующим образом: F(1) = 1, F(2) = 1, F(K) = F(K-2) + F(K-1), K = 3, 4, .... Проверить, является ли число N числом Фибоначчи. Если является, то вывести TRUE, если нет - вывести FALSE.
6. Даны положительные числа A, B, C. На прямоугольнике размера A x B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать.
7. Дано целое число N (> 1), являющееся числом Фибоначчи: N = F(K). Найти целое число K - порядковый номер числа Фибоначчи N.