# Цикл while ---- Цикл while позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла. ---- Синтаксис цикла while в простейшем случае выглядит так: ``` while условие: блок инструкций ``` ---- При выполнении цикла while сначала проверяется условие. Если оно ложно, то выполнение цикла прекращается и управление передается на следующую инструкцию после тела цикла while. Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла. ---- Пример цикла: ``` i = 1 while i <= 10: print(i ** 2) i += 1 ``` ---- В этом примере переменная i внутри цикла изменяется от 1 до 10. Такая переменная, значение которой меняется с каждым новым проходом цикла, называется счетчиком. Заметим, что после выполнения этого фрагмента значение переменной i будет равно 11, поскольку именно при i == 11 условие i <= 10 впервые перестанет выполняться. ---- Вот еще один пример использования цикла while для определения количества цифр натурального числа n: ``` n = int(input()) length = 0 while n > 0: n //= 10 # это эквивалентно n = n // 10 length += 1 print(length) ``` ---- В этом цикле мы отбрасываем по одной цифре числа, начиная с конца, что эквивалентно целочисленному делению на 10 (n //= 10), при этом считаем в переменной length, сколько раз это было сделано. ---- После тела цикла можно написать слово else: и после него блок операций, который будет выполнен один раз после окончания цикла, когда проверяемое условие станет неверно: ``` i = 1 while i <= 10: print(i) i += 1 else: print('Цикл окончен, i =', i) ``` ---- Другая инструкция управления циклом — continue (продолжение цикла). Если эта инструкция встречается где-то посередине цикла, то пропускаются все оставшиеся инструкции до конца цикла, и исполнение цикла продолжается со следующей итерации. ``` for i in range(3): for j in range(5): if j > i: break print(i, j) ``` ---- Если инструкции break и continue содержатся внутри нескольких вложенных циклов, то они влияют лишь на исполнение самого внутреннего цикла. ---- Увлечение инструкциями break и continue не поощряется, если можно обойтись без их использования. Вот типичный пример плохого использования инструкции break (данный код считает количество знаков в числе). ``` n = int(input()) length = 0 while True: length += 1 n //= 10 if n == 0: break print('Длина числа равна', length) ``` ---- Гораздо лучше переписать этот цикл так: ``` n = int(input()) length = 0 while n != 0: length += 1 n //= 10 print('Длина числа равна', length) ``` --- ## Задачи ---- 1. По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастания. ---- 2. Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1. ---- 3. Программа получает на вход последовательность целых неотрицательных чисел, каждое число записано в отдельной строке. Последовательность завершается числом 0, при считывании которого программа должна закончить свою работу и вывести количество членов последовательности (не считая завершающего числа 0). Числа, следующие за числом 0, считывать не нужно. ---- 4. Определите сумму всех элементов последовательности, завершающейся числом 0. В этой и во всех следующих задачах числа, следующие за первым нулем, учитывать не нужно. ---- 5. Определите среднее значение всех элементов последовательности, завершающейся числом 0. ---- 6. По данному натуральному числу N найдите наибольшую целую степень двойки, не превосходящую N. Выведите показатель степени и саму степень. Операцией возведения в степень пользоваться нельзя! ---- 7. В первый день спортсмен пробежал x километров, а затем он каждый день увеличивал пробег на 10% от предыдущего значения. По данному числу y определите номер дня, на который пробег спортсмена составит не менее y километров. Программа получает на вход действительные числа x и y и должна вывести одно натуральное число. ---- 8. Определите количество четных элементов в последовательности, завершающейся числом 0. ---- 9. Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение наибольшего элемента последовательности. ---- 10. Последовательность состоит из натуральных чисел и завершается числом 0. Определите индекс наибольшего элемента последовательности. Если наибольших элементов несколько, выведите индекс первого из них. Нумерация элементов начинается с нуля. ---- 11. Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности больше предыдущего элемента. ---- 12. Последовательность состоит из различных натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой последовательности. Гарантируется, что в последовательности есть хотя бы два элемента. ---- 13. Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности равны ее наибольшему элементу. ---- 14. Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу.
{"metaMigratedAt":"2023-06-17T04:02:24.995Z","metaMigratedFrom":"Content","title":"Цикл while","breaks":true,"contributors":"[{\"id\":\"0d39d5a3-691d-488c-8f1e-1a0fb0be4f13\",\"add\":5677,\"del\":0}]"}
    316 views