06.03.2026

Решение задач на цикл while в Python для 8 класса. Подробный разбор

Цикл while (цикл с предусловием) — одна из базовых конструкций в программировании, которую проходят в 8 классе на уроках информатики. Он позволяет выполнять блок кода снова и снова, пока условие остается истинным (True).

Многие ученики путаются, когда нужно использовать for, а когда while. Главное правило: while используется, когда мы заранее не знаем, сколько раз циклу нужно будет выполниться.

В этой публикации мы подробно разберем конкретную задачу, которая часто встречается в школьной программе, и научимся правильно применять цикл while в Python.

Теория: Как работает while?

Прежде чем перейти к задаче, вспомним синтаксис:

python
while условие:
    # действие 1
    # действие 2
    # ... (тело цикла)
  • Условие — это логическое выражение (например, x < 10 или a != 0).

  • Тело цикла — это команды, которые будут повторяться, пока условие истинно.

  • Важно! В теле цикла должна происходить смена переменной, входящей в условие, иначе цикл будет бесконечным (программа зависнет).

Разбор задачи: Ввод чисел до нуля

Это классическая задача для 8 класса, которая отлично иллюстрирует суть цикла while.

Условие задачи:

Написать программу, которая считывает целые числа с клавиатуры. Если число четное, программа должна вывести его на экран. Как только пользователь введет число 0, программа должна завершить работу и вывести сообщение "Программа остановлена".

Почему здесь подходит while?

Мы не знаем, сколько чисел введет пользователь. Он может ввести 5 чисел, а может 100. Условие остановки — ввод нуля. Это идеальный случай для цикла с предусловием.

Шаг 1: Разработка алгоритма

  1. Начало.

  2. Запросить у пользователя число (первое).

  3. Проверка: Пока число не равно 0, делать следующее:

    • Если число четное (делится на 2 без остатка), то вывести его.

    • Снова запросить у пользователя число (самое важное!).

  4. Если число равно 0, выйти из цикла.

  5. Вывести сообщение о завершении.

  6. Конец.

Шаг 2: Написание кода на Python

Давайте реализуем этот алгоритм. Обратите внимание, что запрос числа находится в двух местах: перед циклом (чтобы было что проверять в первый раз) и в конце тела цикла (чтобы ввести очередное число).

python
# Информатика, 8 класс: пример использования цикла while
print("Вводите числа. Для остановки введите 0.")
# Запрашиваем первое число
number = int(input("Введите число: "))
# Запускаем цикл: пока number не равен 0
while number != 0:
    # Проверяем четность
    if number % 2 == 0:
        # Выводим четное число
        print(f"Четное число: {number}")
    # СНОВА запрашиваем число. Это ключевой момент!
    # Если забыть эту строку, условие никогда не изменится, и цикл станет бесконечным.
    number = int(input("Введите число: "))
# Как только number стал равен 0, программа идет сюда:
print("Программа остановлена. Вы ввели 0.")

Шаг 3: Проверка работы программы (Тестирование)

Запустим программу и введем несколько чисел (то, что вводит пользователь, выделено жирным для наглядности):

Вводите числа. Для остановки введите 0.
Введите число: 5 (не четное -> ничего не выводим)
Введите число: 8 (четное -> выводим)
Четное число: 8
Введите число: 12 (четное -> выводим)
Четное число: 12
Введите число: 7 (не четное -> ничего не выводим)
Введите число: 0 (условие while 0 != 0? Ложь. Цикл завершен)
Программа остановлена. Вы ввели 0.

Программа работает именно так, как требуется в задаче.

Типичные ошибки новичков (8 класс)

Разбирая задачи на цикл while на уроках информатики, ученики часто допускают одни и те же ошибки. Запомни их, чтобы не терять баллы:

  1. Забыли изменить переменную в теле цикла.

    • Ошибка: В коде выше забыть написать вторую строчку number = int(input(...)).

    • Результат: Если первое число не 0, программа начнет выводить его бесконечно (или четное число бесконечно), так как значение number не меняется. Программа "зависнет".

  2. Путаница с else.

    • В цикле while в Python тоже может быть блок else, который выполняется, если выход из цикла произошел не по break, а естественным путем.

Заключение

Цикл while в Python — мощный инструмент для решения задач, где количество шагов заранее неизвестно. Мы разобрали простую, но показательную задачу, которая часто встречается на уроках информатики в 8 классе.

Главные выводы:

  • Используйте while, когда не знаешь точного числа повторений.

  • Всегда следите за тем, чтобы условие цикла когда-нибудь стало ложным.

  • Не забывайте менять переменные внутри тела цикла.

Попробуйте модифицировать задачу самостоятельно: например, сделать подсчет суммы введенных чисел или подсчет количества четных чисел. Это поможет лучше закрепить материал.

19.11.2025

Задание 25 (ЕГЭ по информатике) поиск чисел, которые являются степенью простого числа с натуральным показателем степени, большим 1

 Задача (№ 25, ЕГЭ по информатике)

Напишите программу, которая перебирает целые числа, большие 700 000, в порядке возрастания и ищет среди них такие, которые являются степенью простого числа с натуральным показателем степени, большим 1.
В ответе в первом столбце таблицы запишите первые 5 найденных чисел в порядке возрастания, а во втором столбце - для каждого из чисел соответствующие им простое число.

Например, число 27 = 33

Количество строк в таблице для ответа избыточно.

Алгоритм решения

  1. Перебираем числа, начиная с 700 001.

  2. Для каждого числа находим его разложение на простые множители с учётом кратности (функция f(n)).

  3. Проверяем два условия:

    • Количество множителей в разложении больше 1 (показатель степени > 1).

    • Все множители одинаковые (число является степенью одного простого числа).

  4. Как только находим 5 таких чисел, завершаем перебор.

Программа решения задачи на языке Python

def f(n):
    d = []
    for k in range(2, int(n**0.5) + 1):
        while n % k == 0:
            d.append(k)
            n //= k
    if n > 1:
        d.append(n)
    return d

k = 0
x = 700001
while k != 5:
    y = f(x)
    y1 = set(y)
    if len(y) > 1 and len(y1) == 1:
        print(x, y[0])
        k += 1
    x += 1
Пояснения
  • Функция f(n) возвращает список простых делителей числа n (например, для числа 72 → [2, 2, 2, 3, 3]).

  • y1 = set(y) оставляет только уникальные делители. Если все делители одинаковые, длина множества будет равна 1.

  • Условие len(y) > 1 гарантирует, что показатель степени больше 1.

Результат выполнения программы

703921 839

704969 89

707281 29

727609 853

734449 857


03.07.2025

ЕГЭ по информатике. Задание 25. Поиск чисел, представленных в виде произведения ровно двух простых множителей, не обязательно различных

Задача. Напишите программу, которая перебирает целые числа, большие 6 651 220, в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи ровно одну цифру 2.

В ответе в первом столбце таблицы запишите первые 5 найденных чисел в порядке возрастания, а во втором столбце - для каждого из чисел соответствующий им наибольший из найденных множителей.

Источник: kompege.ru

Пример числа:

Число 6651241 можно разложить на 2579 × 2579, и оба этих множителя — простые числа, содержащие ровно одну цифру "2".

Напишем функцию, которая возвращает список простых множителей, в виде произведения которых можно представить заданное натуральное число.

def f(n):

    a = []

    for k in range(2,int(n**0.5)+1):

        while n%k==0:

            a.append(k)

            n//=k

    if n>1:

        a.append(n)

    return a

  • В цикле для k от 2 до √n: пока число n делится на k, добавляем число k в список множителей.

  • После разложения, если n > 1, значит, оно простое и его тоже добавляем в список.

Проверяем работу функции

print(f(12)) # вывод [2, 2, 3]

print(f(424)) # вывод [2, 2, 2, 53]

print(f(6889)) # вывод [83, 83]

print(f(17)) # вывод [17]

Решаем задачу

p = 0  # Счётчик найденных чисел

x = 6_651_220 + 1  # Начинаем с числа после 6 651 220

while p != 5:

    y = f(x) # Получаем список множителей для числа x

    if len(y) == 2:  # Если у числа x ровно два простых множителя

        # Проверяем, что в каждом множителе ровно одна цифра "2"

        if str(y[0]).count('2') == 1 and str(y[1]).count('2') == 1:

            print(x, max(y))  # Выводим число и наибольший множитель

            p += 1

    x += 1  # Переходим к следующему числу

Вывод:

6651241 2579

6651262 3325631

6651286 3325643

6651314 3325657

6651347 289189

03.01.2025

Идет невисокосный год. Сколько дней до Нового года?

 Задача. Пусть идет невисокосный год. Сколько дней до Нового года? 

Сохраним количество дней в каждом месяце в списке days.

Применим срезы по-новогоднему :)

Программа на Python

print('Год не високосный. Сколько дней до Нового года? Введите текущие')

m = int(input('месяц: '))

d = int(input('день: '))

days = [31,28,31,30,31,30,31,31,30,31,30,31]

print('До Нового года: ',sum(days[m-1:])- d + 1,' дн.')

Еще бы выводить сообщение об ошибочных данных, если пользователь введет не то, что нужно (допишем еще)

Запуск на текущий момент 

Год не високосный. Сколько дней до Нового года? Введите текущие

месяц: 1

день: 3

До Нового года:  363  дн.

04.11.2024

Срезы строк в Питоне

Для решения задач частенько требуются строки и умение их обрабатывать. В этой публикации покажем некоторые примеры работы со строками с использованием срезов.

Строка в Питоне

Последовательность символов, заключенная в апострофы 'HELLO'

s = 'HELLO'

Нумерация символов в строке ведется с 0.

Обращение к символу строки

s = 'HELLO'

s[0] # символ 'H'

s[1] # символ 'E'

s[-1] #последний символ 'O'

s[-2] #предпоследний символ 'L'

Срезы строк (части строки) 

строка[нач_поз: кон_поз: шаг] # конечная позиция не включается

s = '0123456789'

a = s[0:9] # a = '012345678'

a = s[1:] # a =  '123456789'  если конечную позицию опускаем, то берется срез до конца строки

a = s[:7] # a = '0123456'  если начальную позицию опускаем, то берется срез от начала строки

a = s[1:8:2] # a = '1357'

a = [::-1] # a = '9876543210' берем всю строку с шагом -1, переворачиваем строку

Задача. Вводится натуральное число. Записать это число в двоичной системе счисления, перевернуть и отбросить ведущие нули.

Пример:

N = 4410 = 1011002

Перевернутая двоичная запись: 001101

Двоичная запись без ведущих нулей: 1101

Как будем решать задачу

  1. Введем число n
  2. Переведем число n  в двоичную систему функцией bin(), получим строку s
    s = bin(n)
    для n = 44 получим s = '0b101100'
  3. Возьмем срез s[2:], избавимся от первых двух знаков '0b' 
    s = s[2:]
  4. Перевернем запись срезом s[::-1]
  5. Найдем в перевернутой строке позицию первой единицы методом s.find('1')
    pos = s.find('1')
  6. Возьмем срез с найденной позиции до конца строки
    s = s[pos:]

Программа решения задачи на языке Python

n = int(input('Введи натуральное число: '))

s = bin(n)

s = s[2:]

s = s[::-1]

pos = s.find('1')

s = s[pos:]

print(s)

Результат запуска программы

Введи натуральное число: 100

10011

Покороче

s = bin(n)[2:][::-1]

s = s[s.find('1'):]