Разбор задания №16 ОГЭ по информатике: Программирование на Python на максимальные 2 балла
Задание №16 в ОГЭ по информатике — финальное задание экзамена, проверяющее навыки практического программирования и умение реализовывать алгоритмы обработки числовых последовательностей.
Ранее эта задача была известна как задание 15.2. В актуальной структуре экзамена выбора между Роботом и кодом больше нет: «Робот» стал обязательным заданием №15, а программирование вынесено в самостоятельное задание №16.
За полное и безошибочное решение даётся 2 первичных балла. Программа сохраняется в отдельный файл и проверяется экспертами предметной комиссии на скрытых автоматических тестах.
Почему Python — единственный актуальный выбор на ОГЭ
Формально спецификация разрешает сдавать решение на C++, Pascal, Python или школьном алгоритмическом языке. Однако на практике Python сегодня является безоговорочным лидером:
- Минимум шаблонного кода: В Python не нужно объявлять типы переменных, подключать громоздкие библиотеки и ставить точки с запятой. Вся программа для ОГЭ умещается в 6–10 понятных строк.
- Прямой мостик к ЕГЭ: В 10–11 классах на компьютерном ЕГЭ (КЕГЭ) более 70% заданий первой части и сложнейшие задачи второй части (№24, 26, 27) решаются именно на Python. Осваивая его в 9 классе, ученик инвестирует в баллы своего будущего выпускного экзамена.
- Безопасная работа с большими числами: В Python встроенная длинная арифметика исключает переполнение типов, с которым часто сталкиваются начинающие программисты на C++.
- Удобный ввод данных: Чтение чисел через
input()в цикле интуитивно понятно и не требует сложной работы с потоками.
1. Критерии оценивания задания №16
Решение проверяется на наборе скрытых тестов, подготовленных экспертами ФИПИ:
| Баллы | Критерии оценивания решения |
| 2 балла | Программа правильно работает на всех тестах, учитывает ограничения диапазона чисел, корректно обрабатывает отрицательные значения и выводит верный результат. |
| 1 балл | Допущена одна содержательная ошибка (например: не использован модуль при поиске последней цифры у отрицательных чисел, неверно инициализирован поиск минимума/максимума), из-за которой программа даёт сбой лишь на некоторых тестах. |
| 0 баллов | Программа не запускается из-за синтаксической ошибки, зацикливается, не выводит ответ или решает задачу неверно. |
2. Базовый арсенал операций Python для ОГЭ
Для решения любого прототипа задания №16 достаточно уверенно владеть небольшим набором конструкций:
- Ввод целого числа:
x = int(input()) - Проверка делимости (кратности):
x % 4 == 0— число делится на 4 без остатка.x % 2 != 0— число нечётное. - Проверка последней цифры (золотое правило!):
abs(x) % 10 == 7— число оканчивается на 7.(Функцияabs()берёт число по модулю. Без неё для отрицательного числа-17 % 10в Python получится3, а не7, что приведёт к потере балла!). - Проверка диапазона (двузначные / трёхзначные числа):
10 <= abs(x) <= 99— число является двузначным.100 <= abs(x) <= 999— число является трёхзначным. - Накопители (счётчик и сумма):
count += 1— подсчёт количества подходящих чисел.total_sum += x— накопление суммы.
3. Два базовых шаблона ввода данных
В задании №16 встречаются всего два сценария подачи входных чисел.
Шаблон 1: Количество чисел N известно заранее
Сначала вводится число N, а затем ровно N элементов последовательности. Для этого используется цикл for:
Python
n = int(input())
count = 0
for _ in range(n):
x = int(input())
if условие:
count += 1
print(count)
Шаблон 2: Последовательность завершается нулём
Количество чисел заранее неизвестно, но сказано: «программа получает числа до тех пор, пока не будет введён 0 (ноль — признак окончания ввода)». Для этого используется цикл while True:
Python
count = 0
while True:
x = int(input())
if x == 0:
break # Выходим из цикла при вводе нуля
if условие:
count += 1
print(count)
4. Разбор типовых задач из банка ФИПИ
Пример 1. Подсчёт количества чисел (ввод до нуля)
Условие:
Напишите программу, которая в последовательности целых чисел определяет количество чисел, кратных 4 и оканчивающихся на 8.
Программа получает на вход целые числа, количество введённых чисел неизвестно, последовательность заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность).
Количество чисел не превышает 1000. Введённые числа не превышают по модулю 30 000.
Программа должна вывести одно число — количество найденных элементов.
Решение на Python:
Python
count = 0
while True:
x = int(input())
if x == 0:
break
# Проверяем кратность 4 и последнюю цифру через модуль abs()
if x % 4 == 0 and abs(x) % 10 == 8:
count += 1
print(count)
Пример 2. Поиск суммы с несколькими условиями (ввод через N)
Условие:
Напишите программу, которая в последовательности натуральных чисел вычисляет сумму всех трёхзначных чисел, кратных 5.
Программа получает на вход количество чисел N (1 ≤ N ≤ 100), а затем сами числа.
Гарантируется, что в последовательности есть хотя бы одно подходящее число. Выведите полученную сумму.
Решение на Python:
Python
n = int(input())
total_sum = 0
for _ in range(n):
x = int(input())
# Проверяем трёхзначность и делимость на 5
if 100 <= x <= 999 and x % 5 == 0:
total_sum += x
print(total_sum)
Пример 3. Поиск минимума или максимума (краевые значения)
Условие:
Напишите программу, которая в последовательности натуральных чисел находит минимальное число, оканчивающееся на 3.
Программа получает на вход количество чисел N, а затем сами числа.
Гарантируется, что хотя бы одно подходящее число присутствует. Числа не превышают 30 000.
Особенность задачи:
При поиске минимума начальное значение переменной должно быть больше любого возможного числа из условия (если числа до 30 000, берём 30001 или float('inf')). При поиске максимума начальное значение должно быть меньше любого возможного числа.
Решение на Python:
Python
n = int(input())
min_val = 30001 # Заведомо больше любого числа из диапазона задачи
for _ in range(n):
x = int(input())
if abs(x) % 10 == 3:
if x < min_val:
min_val = x
print(min_val)
Пример 4. Вычисление среднего арифметического
Условие:
Напишите программу, которая находит среднее арифметическое чисел, кратных 8. Последовательность оканчивается числом 0.
Если подходящих чисел нет, программа должна вывестиNO. Ответ выведите с точностью до одного знака после запятой.
Решение на Python:
Python
total_sum = 0
count = 0
while True:
x = int(input())
if x == 0:
break
if x % 8 == 0:
total_sum += x
count += 1
if count > 0:
average = total_sum / count
print(round(average, 1))
else:
print("NO")
5. Топ ловушек и типичных ошибок на экзамене
- Забытая функция
abs()для отрицательных чисел:
По условию числа могут быть целыми (включая отрицательные). Если написатьx % 10 == 6, для числа-16проверка вернётFalse. Пишите строго:abs(x) % 10 == 6. - Инициализация минимума нулём:
Если задатьmin_val = 0, а все введённые положительные числа больше нуля, программа в конце выведет начальный ноль, а не найденный минимум. Для поиска минимума берите заведомо большое число (30001), для максимума — заведомо малое (-1или-30001). - Случайный учёт финального нуля:
Строка проверкиif x == 0: breakдолжна стоять до блока проверки условий, иначе ноль попадёт под условия чётности или кратности (0 % 4 == 0вернётTrue) и испортит счётчик. - Деление на ноль при вычислении среднего:
Всегда проверяйтеif count > 0:перед делением суммы на количество, чтобы программа не упала с ошибкойZeroDivisionError. - Формат сохранения файла:
Сохраняйте код через File → Save As... в файл с расширением.pyпод именем, указанным организаторами в аудитории.
Памятка для ученика
┌─────────────────────────────────────────────────────────────┐
│ ЧЕК-ЛИСТ ДЛЯ ЗАДАНИЯ №16 ОГЭ │
├─────────────────────────────────────────────────────────────┤
│ 1. Выбрать шаблон ввода: │
│ • Дано N → «for _ in range(n):» │
│ • До нуля → «while True:» с проверкой «if x == 0: break»│
│ 2. Последнюю цифру проверять строго через abs(x) % 10. │
│ 3. Стартовые значения: │
│ • count = 0 │
│ • total_sum = 0 │
│ • min_val = 30001 / max_val = -30001 │
│ 4. Проверить код на тестовых примерах из бланка задания. │
│ 5. Сохранить файл с расширением .py в рабочую папку. │
└─────────────────────────────────────────────────────────────┘