🔍 Что такое цикл while?
Цикл while — это одна из фундаментальных управляющих конструкций в программировании. Он позволяет многократно выполнять блок кода, пока заданное логическое условие остаётся истинным (True).
В отличие от цикла for, который заранее знает, сколько раз нужно повторить действия (например, по элементам списка или диапазону чисел), цикл while используется тогда, когда количество повторений заранее неизвестно. Это делает его особенно полезным в задачах, где:
- программа должна ждать наступления определённого события;
- данные поступают динамически (например, ввод пользователя);
- вычисления продолжаются до достижения нужной точности или состояния.
📐 Синтаксис цикла while
Как это работает:
- Программа проверяет условие.
- Если условие истинно (True) → выполняется всё тело цикла (все строки с отступом).
- После завершения тела — снова возвращается к проверке условия.
- Как только условие становится ложным (False) → цикл завершается, и выполнение переходит к следующей строке после цикла.
⚠️ Критически важно: внутри тела цикла должно происходить изменение, которое в конечном итоге сделает условие ложным. Иначе цикл будет выполняться бесконечно.
🧱 Основные принципы работы цикла while
1. Инициализация
Переменные, используемые в условии, должны быть заданы до начала цикла.
Без i = 1 программа выдала бы ошибку: переменная i не определена.
2. Изменение условия
В теле цикла обязательно должно быть действие, влияющее на условие.
Если забыть i = i + 1, цикл станет бесконечным.
3. Проверка перед выполнением
Цикл while — это цикл с предусловием: условие проверяется до первой итерации.
Если оно изначально ложно, тело цикла не выполнится ни разу.
Пример:
4. Отступы определяют тело цикла
Как и во всех конструкциях Python, отступ (обычно 4 пробела) отделяет тело цикла от остального кода.
Неправильно:
Правильно:
📘 Примеры использования цикла while
Задача 1. Вывести первые 10 приветствий с правильными окончаниями
Нужно вывести сообщения "1st Hello", "2nd Hello", "3rd Hello", а затем — "4th Hello", "5th Hello", ..., "10th Hello".
Пошаговое объяснение:
- Первые три строки выводятся вручную, так как окончания уникальны (1st, 2nd, 3rd).
- i = 4 — инициализация счётчика перед циклом.
- Условие: i <= 10 — продолжать, пока не достигнем 10.
- str(i) + "th Hello" — преобразует число в строку и добавляет суффикс.
- i = i + 1 — ключевой шаг: увеличивает счётчик, обеспечивая завершение цикла.
Без i = i + 1 программа печатала бы "4th Hello" вечно.
Задача 2. Вывести все степени двойки, не превышающие заданное число
Для числа n = 100 нужно вывести пары: показатель степени и значение (0 1, 1 2, 2 4, ...), пока степень не превысит 100.
Пошаговое объяснение:
- n = 100 — предел, до которого выводятся степени.
- power = 1 — начальное значение (2⁰ = 1).
- i = 0 — показатель степени.
- Условие: power <= n — продолжать, пока степень не превысит n.
- На каждой итерации: выводится пара: показатель степень;
power = 2 * power — удваивает текущую степень;
i = i + 1 — увеличивает показатель. - Цикл завершается, когда power > n.
Запись на занятия здесь: https://t.me/nka39
Задача 3. Преобразовать число в двоичную запись
Для числа 13 нужно получить его двоичное представление: "1101".
Пошаговое объяснение:
- n = 13 — исходное число.
- s = "" — пустая строка для накопления результата.
- temp = n — рабочая копия числа.
- Условие: temp > 0 — продолжать, пока число не станет нулём.
- temp % 2 — остаток от деления на 2 (последняя цифра в двоичной записи).
- str(temp % 2) + s — добавляет новую цифру в начало строки.
- temp = temp // 2 — целочисленное деление, отбрасывает последнюю цифру.
- Цикл завершается, когда temp == 0.
Задача 4. Моделировать игру «Разорение игрока»
Игрок начинает с 5 монет, цель — достичь 10. На каждом ходе он либо выигрывает, либо проигрывает 1 монету с равной вероятностью. Нужно смоделировать игру до её завершения.
Пошаговое объяснение:
- stake = 5 — начальный капитал.
- goal = 10 — желаемая сумма.
- Условие: stake > 0 and stake < goal — игра продолжается, пока игрок не разорился или не достиг цели.
- random.randrange(2) — генерирует 0 или 1 (проигрыш/выигрыш).
- При проигрыше: stake -= 1; при выигрыше: stake += 1.
- trials += 1 — считает количество сделанных ставок.
- Цикл завершается, когда stake == 0 или stake == goal.
Задача 5. Разложить число на простые множители
Для числа 3757208 нужно вывести все его простые делители по одному в строке.
Пошаговое объяснение:
- n = 3757208 — число для разложения.
- factor = 2 — первый возможный делитель.
- Внешний цикл: factor * factor <= n — перебираем делители до корня из n.
- Внутренний цикл: while n % factor == 0 — пока factor делит n:выводим factor;
делим n на factor. - После выхода из внутреннего цикла: factor += 1 — переходим к следующему делителю.
- Если после всех делений n > 1, значит, остался простой множитель — выводим его.
Задача 6. Вычислить гармоническое число H(n)
Гармоническое число — это сумма 1 + 1/2 + 1/3 + ... + 1/n.
Для n = 5 нужно вычислить эту сумму.
Пошаговое объяснение:
- n = 5 — количество слагаемых.
- total = 0.0 — аккумулятор суммы.
- i = 1 — счётчик слагаемых.
- Условие: i <= n — продолжать, пока не наберём n слагаемых.
- 1.0 / i — очередное слагаемое.
- total += ... — добавляем к сумме.
- i += 1 — переходим к следующему слагаемому.
Задача 7. Вывести все чётные числа от 2 до N
Для N = 20 нужно вывести: 2, 4, 6, ..., 20.
Пошаговое объяснение:
- N = 20 — верхняя граница.
- i = 2 — начальное чётное число.
- Условие: i <= N — продолжать, пока не превысим N.
- print(i) — вывод текущего чётного числа.
- i = i + 2 — переходим к следующему чётному.
Задача 8. Подсчитать количество цифр в числе
Для числа 12345 нужно определить, что в нём 5 цифр.
Пошаговое объяснение:
- n = 12345 — исходное число.
- count = 0 — счётчик цифр.
- temp = n — рабочая копия.
- Условие: temp > 0 — продолжать, пока число не станет нулём.
- count += 1 — увеличиваем счётчик.
- temp = temp // 10 — отбрасываем последнюю цифру.
- Цикл завершается, когда temp == 0.
Задача 9. Читать числа до тех пор, пока не введут 0, и вывести их сумму
Программа должна запрашивать числа по одному, пока пользователь не введёт 0, затем вывести сумму всех введённых чисел.
Пошаговое объяснение:
- total = 0 — аккумулятор суммы.
- while True: — бесконечный цикл.
- x = int(input()) — читаем число.
- if x == 0: break — если введён 0, выходим из цикла.
- Иначе — добавляем число к сумме.
- После выхода — выводим итог.
Задача 10. Найти наибольшую степень двойки, не превышающую N
Для N = 1000 нужно найти наибольшее 2^k ≤ 1000 → ответ: 512.
Пошаговое объяснение:
- n = 1000 — предел.
- power = 1 — начальное значение.
- Условие: 2 * power <= n — можно ли удвоить ещё раз?
- Если да — удваиваем power.
- Цикл завершается, когда следующая степень превысит n.
- Остаётся наибольшая допустимая степень.
⚠️ Типичные ошибки
Если Вам информация была для Вас полезна, то можно поддержать автора, нажав на кнопку "Поддержать".
Подпишитесь на канал и научитесь решать все задания ЕГЭ по информатике!
Удачи на экзамене!
Записаться ко мне на занятия можно тут https://t.me/nka39
✍️ Практические задания
- Напишите программу, которая выводит все нечётные числа от 1 до 50.
- Напишите программу, которая считывает числа до -1 и выводит их среднее арифметическое.
- Реализуйте цикл, который находит наименьшую степень тройки, превышающую 1000.
- Напишите программу, которая определяет, является ли введённое число степенью двойки.
- Создайте программу, которая считает, сколько раз нужно разделить число на 2, чтобы получить 1.