- Питон цикл while задачи
- Инструкции управления циклом
- Упражнения
- A: Список квадратов
- B: Список степеней двойки
- C: Список факториалов
- D: Трискайдекафобия
- E: Ещё одно замечательное число
- F: Минимальный делитель
- G: Утренняя пробежка
- H: Точная степень двойки
- Обработка последовательности в while
- I: Повторитель
- J: Длина последовательности
- K: Произведение последовательности
- L: Среднее значение последовательности
- M: Количество четных элементов последовательности
- Бесконечность
- N: Минимум последовательности
- O: Количество чётных чисел в начале последовательности
- Цикл while в Python
- Примеры
- Решение задач
Питон цикл while задачи
Цикл while («пока») позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.
Синтаксис цикла while в простейшем случае выглядит так:
while условие: блок инструкций
При выполнении цикла while сначала проверяется условие. Если оно ложно, то выполнение цикла прекращается и управление передается на следующую инструкцию после тела цикла while . Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла.
Например, следующий фрагмент программы напечатает на экран квадраты всех целых чисел от 1 до 10. Видно, что цикл while может заменять цикл for . in range(. ) :
В этом примере переменная i внутри цикла изменяется от 1 до 10. Такая переменная, значение которой меняется с каждым новым проходом цикла, называется счетчиком. Заметим, что после выполнения этого фрагмента значение переменной i будет равно 11 , поскольку именно при i==11 условие i
Вот еще один пример использования цикла while для определения количества цифр натурального числа n :
n = int(input()) length = 0 while n > 0: n //= 10 length += 1
В этом цикле мы отбрасываем по одной цифре числа, начиная с конца, что эквивалентно целочисленному делению на 10 ( n //= 10 ), при этом считаем в переменной length , сколько раз это было сделано.
В языке Питон есть и другой способ решения этой задачи: .
Инструкции управления циклом
После тела цикла можно написать слово else: и после него блок операций, который будет выполнен один раз после окончания цикла, когда проверяемое условие станет неверно:
Казалось бы, никакого смысла в этом нет, ведь эту же инструкцию можно просто написать после окончания цикла. Смысл появляется только вместе с инструкцией 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\), в порядке возрастания.
B: Список степеней двойки
По данному числу \(N\) распечатайте все степени двойки, не превосходящие \(N\), в порядке возрастания.
Решение должно иметь сложность \(O(N)\), то есть операций возведения в степень пользоваться нельзя.
C: Список факториалов
По данному числу \(N\) распечатайте все факториалы, не превосходящие \(N\), в порядке возрастания.
D: Трискайдекафобия
Трискайдекафобия — боязнь числа 13. В особо сложных формах пациент боится и всех чисел, кратных 13.
Дано целое число \(N\). Выведите все целые числа по возрастанию, начиная с числа \(N\), пока не встретится число, кратное 13. Его выводить не нужно.
Программа должна быть решена при помощи одного цикла while, без if внутри цикла.
E: Ещё одно замечательное число
Найдите наименьшее двузначное число, которое равно сумме своих цифр, умноженной на 7. Выведите это число.
Напишите программу, содержащую только один цикл while, без if внутри цикла.
F: Минимальный делитель
Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1.
В этой задаче нельзя использовать инструкцию if.
G: Утренняя пробежка
В первый день спортсмен пробежал \(x\) километров, а затем он каждый день увеличивал пробег на 10% от предыдущего значения. По данному числу \(y\) определите номер дня, на который пробег спортсмена составит не менее \(y\) километров.
Программа получает на вход действительные числа \(x\) и \(y\) и должна вывести одно натуральное число.
Названия \(x\) и \(y\) используются здесь для удобства обозначения. Называть переменные буквами \(x\) и \(y\) нельзя.
H: Точная степень двойки
Дано натуральное число N. Выведите слово YES , если число N является точной степенью двойки, или слово NO в противном случае.
Операцией возведения в степень пользоваться нельзя!
Инструкция if должна быть после цикла.
Обработка последовательности в while
Иногда нужно обрабатывать последовательность объектов до тех пор, пока не встретится какой-то «особый» объект. И тут есть два варианта: нужно остановиться после обработки «особого» объекта, либо до.
Если «особый» элемент нужно обработать, то обычно пишут так:
x = любое_не_особое_значение while x is not особый: x = взять_следующий обработать
Если «особый» элемент НЕ нужно обрабатывать (то есть нужно остановиться сразу), то обычно пишут так:
x = взять_следующий while x is not особый: обработать x = взять_следующий
Первый вариант использования цикла предпочтителен сразу по нескольким причинам. Во-первых, каждая итерация цикла начинается с взятия нового значения. Если мы на предыдущей итерации сделали continue , то в этой итерации сразу всё ок. Во-вторых, значение заполняется ровно в одном месте. Если код для получения нового значения длинный, то он не будет дублироваться. Ну и без дублирования кода нельзя забыть исправить дубль.
Начиная с python 3.8 (у нас на сервере ещё python 3.5, увы) можно писать и второй вариант обработки без повторов, вот так:
while (x := взять_следующий) is not особый: обработать
I: Повторитель
Пользователь вводит слова по одному в строке, программа выводит эти слова, разворачивая их в обратном порядке. Программа останавливается, когда пользователь введёт “STOP!”
J: Длина последовательности
Программа получает на вход последовательность целых неотрицательных чисел, каждое число записано в отдельной строке. Последовательность завершается числом 0, при считывании которого программа должна закончить свою работу и вывести количество членов последовательности (не считая завершающего числа 0).
Числа, следующие за числом 0, считывать не нужно.
K: Произведение последовательности
Определите произведение всех элементов последовательности, завершающейся числом 0.
L: Среднее значение последовательности
Определите среднее значение всех элементов последовательности, завершающейся числом 0.
Гарантируется, что в последовательности есть хотя бы один элемент (кроме завершающего числа 0).
M: Количество четных элементов последовательности
Определите количество четных элементов в последовательности, завершающейся числом 0.
Бесконечность
Когда мы ищем что-то самое большое или самое маленькое, то часто удобно сначала положить в переменную что-то, что уж точно меньше (ну или больше), чем всё, что нам может встретиться. В питоне для этого можно использовать бесконечности:
$\infty = $ float(‘inf’) , $-\infty = $ float(‘-inf’)
x = float('inf') x > 10000 # True x > 1098465164864134681315 # True x > 1e300 # True
Ещё один плюс бесконечностей в том, что их легко отличить от «обычных» чисел. Если в переменной осталась бесконечность, значит ничего дельного мы не встретили.
N: Минимум последовательности
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение наименьшего элемента последовательности.
Гарантируется, что в последовательности есть хотя бы один элемент (кроме завершающего числа 0).
O: Количество чётных чисел в начале последовательности
Последовательность завершается числом 0. Определите, какое число чётных чисел идёт в начале последовательности (длину наибольшего префикса последовательности, состоящего только из чётных чисел). Сам 0 при этом не считается элементом последовательности.
В этой задаче нельзя использовать if.
Цикл while в Python
Цикл while («пока») позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается после ключевого слова while и проверяется до выполнения тела цикла.
Цикл while используется, когда невозможно определить точное количество повторений цикла.
i = 0 # объявление переменной i для условия цикла
while i 5 : # ключевое слово ‘while’ и условие выполнение цикла
# тело цикла
print (i) # вывод значения переменной i
i += 1 # увеличение значения переменной i на единицу
Цикл while может быть бесконечным.
i = 0
while True : # условие всегда истинно
print (i)
i += 1
# Вывод:
>> 0
>> 1
>> 2
>> 3
>> 4
.
>> 999
.
# Это может продолжаться долго.
Выполнение цикла можно прерывать с помощью оператора break.
i = 0
while 1 : # условие всегда истинно
if i == 3 : # если i равно 3, то вызываем оператор break
break # оператор break прерывает выполнение цикла
print (i)
i += 1
Оператор continue начинает повторение цикла заново.
i = 0
while i 5 :
i += 1 #
if i % 2 == 1 : # если значение i нечетно, то вызываем оператор continue
continue # оператор continue начинает повторение цикла заново
# в случае вызова continue код ниже не выполнится
print (i)
Как и для цикла for, для цикла while мы можем записать конструкцию else.
x = 1
while x 5 :
print (x)
x += 1
else :
print ( ‘Цикл завершен’ )
Примеры
# Пользователь вводит числа A и B (A > B). Выведите все числа от A до B включительно.
A = int ( input ( ‘Введите число: ‘ ))
B = int ( input ( ‘Введите число: ‘ ))
# Пользователь вводит числа до тех пор, пока не введет 0.
# Выведите количество введенных чисел (0 считать не нужно).
n = int ( input ( ‘Введите число: ‘ ))
counter = 0 # счетчик введенных чисел
while n: # n неявно преобразуется в тип bool
# если n равно 0, то выполнение цикла прервется
n = int ( input ( ‘Введите число: ‘ )) # вводим очередное число
counter += 1 # увеличиваем счетчик
print ( f ‘Количество чисел ‘ )
# Ввод:
>> 1
>> 10
>> 100
>> 1000
>> 0
# Вывод:
>> Количество чисел 4
# Пользователь вводит число N (N > 1). Выведите его наименьший делитель.
N = int ( input ( ‘Введите число: ‘ ))
div = 2
while N % div != 0 :
div += 1
print ( f ‘Наименьший делитель равен ‘ )
# Ввод:
>> 10
# Вывод:
>> Наименьший делитель равен 2
# Ввод:
>> 15
# Вывод:
>> Наименьший делитель равен 3
# Ввод:
>> 17
# Вывод:
>> Наименьший делитель равен 17
Решение задач
Пользователь вводит числа A и B (A > B). Выведите четные числа от A до B включительно.
Пользователь вводит числа A и B (A # Ввод:
>> 1
>> 15
# Вывод:
>> 3
>> 6
>> 9
>> 12
>> 15
Пользователь вводит числа до тех пор, пока не введет 0. Выведите сумму введенных чисел (0 считать не нужно).
# Ввод:
>> 1
>> 15
>> 10
>> 11
>> 2
>> 0
# Вывод:
>> Сумма равна: 39
Пользователь вводит числа до тех пор, пока не введет 0. Выведите максимальное введенное число (0 считать не нужно).
# Ввод:
>> 1
>> 15
>> 10
>> 11
>> 2
>> 0
# Вывод:
>> Максимум равен: 15
Пользователь вводит числа до тех пор, пока не введет 0. Выведите минимальное введенное число (0 считать не нужно).
# Ввод:
>> 1
>> 15
>> 10
>> 11
>> 2
>> 0 # 0 не входит в последовательность
# Вывод:
>> Минимум равен: 1
Пользователь вводит число N. Выведите факториал число N. Факториал числа N — это произведение всех чисел от 1 до N включительно. Например, факториал числа 5 равен 120.
7. Фибоначчи (финальный босс)
Пользователь вводит число N. Выведите N-ное по счету число Фибоначчи. Последовательность чисел Фибоначчи рассчитывается по такой формуле: F(1) = 1, F(2) = 1, F(K) = F(K-2) + F(K-1). Идея такая: каждое следующее число равно сумму двух предыдущих.
Первые 10 чисел последовательности: 1 1 2 3 5 8 13 21 34 55 .