- Знать место письменных заданий в работе, их вес и шкалу оценки (0, ⅓, ½, ⅔, 1).
- Извлекать из таблицы Giriş / Çıxış формат ввода, вид вывода и особый случай (
yoxdur). - Писать полную программу по готовому каркасу для пяти семейств задач: числа в промежутке и делители, классы остатков, списки, цифры, строки.
- Проверять программу на примерах и находить типичные ошибки, из-за которых теряются баллы.
В конце части по информатике в листе ответов ждут пустое поле и одна фраза: «…напишите на языке Python программу, которая выводит… Например:» — и рядом маленькая таблица Giriş / Çıxış (ввод / вывод). Вариантов ответа нет, написанную программу оценивают проверяющие (маркеры). Есть и хорошая новость: все восемь письменных заданий по Python на четырёх экзаменах 2025–2026 годов относятся к нескольким семействам. Если знаешь каркас каждого семейства, задание сводится к тому, чтобы «написать условие».
Как выглядит письменное задание и как его оценивают
Часть по информатике — это задания 61–90: 22 закрытых (61–82), 5 с кодируемым ответом (83–87) и 3 письменных (88–90). В задании 88 строится блок-схема (см. урок «Построение блок-схем: письменные задания»), в заданиях 89 и 90 пишется программа на Python. Письменные задания проверяют маркеры по критериям и ставят за каждое 0, ⅓, ½, ⅔ или 1 балл. Подробные критерии DİM не публикует, поэтому цель простая: полная, правильная и понятная программа, в которой на месте каждая часть — ввод, вычисление и вывод.
- NBaотносительный балл за открытые задания
- Dkodчисло верных кодируемых ответов (0–5)
- Dyazılıсумма баллов за письменные задания (0–3)
Закрытая часть добавляет 100/33 · (Dq − Yq/4); максимум по предмету — 100. Письменное задание весит столько же, сколько два задания с кодируемым ответом.
Лейла верно решила 4 из 5 заданий с кодируемым ответом, а за письменные задания получила 1, ⅔ и ½ балла. Каков её относительный балл за открытые задания? Сколько баллов «стоит» полностью решённое письменное задание?
Показать решениеСкрыть решение
NBa = (4 + 2 · 13/6) · 100/33 = (4 + 13/3) · 100/33 = 25/3 · 100/33 ≈ 25,3.
Полностью решённое письменное задание даёт 2 · 100/33 ≈ 6,1 балла, а ⅓ от него ≈ 2,0 балла (по 100-балльной шкале). В подгруппе Rİ весовой коэффициент информатики равен 1, поэтому эти баллы входят в общий балл без изменений.
Вывод: верно начатая, но незаконченная программа тоже может принести баллы — пустое поле никогда.
Самая ценная часть задания — таблица Giriş / Çıxış. Левый столбец показывает то, что набирается на клавиатуре, — каждая строка это один вызов input(). Правый столбец точно показывает, что программа должна вывести: число, слово, список в квадратных скобках или несколько строк. Читай таблицу так:
- 1Посчитай строки
Сколько строк ввода в одном примере? Если первая строка —
nи за ней идут ровноnстрок, сначала прочитайn, затем в циклеnчисел. - 2Выбери тип
Целое число —
int(input()); текст —input(); несколько значений в одной строке через пробел —input().split(' '). - 3Посмотри на вид вывода
Одно число — один
printпосле цикла;[15, 6, 7]—print(b); каждое число на своей строке —printвнутри цикла. - 4Проверь правило
Посчитай один пример вручную: почему получается именно этот ответ? Следи за разницей между «больше» и «больше или равно», «количество» и «сумма».
- 5Найди особый случай
Если в выводе вместо числа стоит слово (
yoxdur— по-азербайджански «нет»), после цикла нуженif–else.
| В столбце Giriş | В программе |
|---|---|
| одно число | n = int(input()) |
| два числа в двух строках | a = int(input()), b = int(input()) |
n, затем n чисел, каждое на своей строке | for i in range(0, n): a.append(int(input())) |
| значения в одной строке через пробел | a = input().split(' ') — элементы являются строками |
| одна строка текста | s = input() |
Каркас программы: ввод → обработка → вывод
Каждая экзаменационная программа состоит из трёх частей, которые всегда пишутся в таком порядке. Ввод: все строки с input() в начале. Обработка: счётчик или сумма обнуляются до цикла (k = 0, s = 0, b = []), цикл проверяет условие и накапливает результат. Вывод: без отступа, после цикла — при необходимости с веткой yoxdur. Десять примеров ниже делятся на пять семейств; первое решение каждого семейства — каркас для всего семейства.
Образцовые решения: пять семейств, десять задач
Семейство 1 — числа в промежутке и делители. Цикл идёт по range(a, b + 1) или range(1, n + 1), при выполнении условия растёт счётчик или сумма. В 2025–2026 годах из этого семейства были задания типа «квадраты нечётных чисел на отрезке» и «сумма нечётных делителей».
Напишите на Python программу, которая для введённых с клавиатуры натуральных чисел a и b (a < b) выводит сумму чётных полных квадратов (4, 16, 36, …) на отрезке [a; b], а если таких чисел нет — слово yoxdur.
Giriş → Çıxış (a и b на отдельных строках)
10, 70 → 116
50, 60 → yoxdur
1, 4 → 4
Показать решениеСкрыть решение
range(a, b + 1).Проверка на полный квадрат:
r = int(x ** 0.5) и r * r == x — точная, так как работает с целыми числами.Чётность:
x % 2 == 0. Сумма s до цикла равна 0.Сумма натуральных чисел равна 0, только если ни одно число не найдено, поэтому после цикла
if s == 0: → yoxdur.Проверка: [10; 70]: 16 + 36 + 64 = 116 ✓.
a = int(input())
b = int(input())
s = 0
for x in range(a, b + 1):
r = int(x ** 0.5)
if x % 2 == 0 and r * r == x:
s = s + x
if s == 0:
print('yoxdur')
else:
print(s)Напишите программу, которая выводит в одной строке через пробел количество и сумму чётных делителей введённого натурального числа n.
Giriş → Çıxış
36 → 6 78
15 → 0 0
8 → 3 14
Показать решениеСкрыть решение
n → range(1, n + 1).Условие из двух частей:
n % d == 0 (делитель) и d % 2 == 0 (чётный), соединённых через and.Оба результата накапливаются в одном цикле;
print(k, s) выводит их через пробел.Проверка: чётные делители 36 — 2, 4, 6, 12, 18, 36 → 6 чисел, сумма 78 ✓.
n = int(input())
k = 0
s = 0
for d in range(1, n + 1):
if n % d == 0 and d % 2 == 0:
k = k + 1
s = s + d
print(k, s)Семейство 2 — классы остатков. Числа записываются в таблицу «змейкой», и спрашивается, в каком столбце стоит число. Две строки таблицы образуют период: при 3 столбцах период 6, при 4 — 8. В 2025 году из этого семейства была таблица с тремя столбцами.
Натуральные числа записаны в столбцы A, B, C, D так: 1-я строка 1 2 3 4, 2-я строка 8 7 6 5, 3-я строка 9 10 11 12, 4-я строка 16 15 14 13 и т. д. Напишите программу, которая выводит столбец введённого числа a.
Giriş → Çıxış
7 → B
12 → D
16 → A
30 → C
Показать решениеСкрыть решение
Значит: A — остаток 1 или 0; B — 2 или 7; C — 3 или 6; D — 4 или 5.
У чисел 8, 16, 24, … остаток 0, и они стоят в столбце A — не забудь этот случай.
Проверка: 30 % 8 = 6 → C ✓ (8-я строка: 32 31 30 29).
a = int(input())
r = a % 8
if r == 1 or r == 0:
print('A')
elif r == 2 or r == 7:
print('B')
elif r == 3 or r == 6:
print('C')
else:
print('D')Семейство 3 — n чисел, введённых в список. Сначала читается n, затем n чисел, которые собираются в пустой список; потом список обрабатывается целиком (min, max, sum) или поэлементно. В 2026 году из этого семейства были задания типа «каждый элемент плюс наименьший элемент» и «файлы, занимающие целые кластеры».
n целых чисел вводятся с клавиатуры в пустой список. Напишите программу, которая выводит новый список, элементы которого — разности между наибольшим элементом исходного списка и каждым элементом.
Giriş → Çıxış (первое число — n, каждое число на своей строке)
4, 3, 10, −2, 7 → [7, 0, 12, 3]
3, 5, 5, 1 → [0, 0, 4]
Показать решениеСкрыть решение
n = int(input()), a = [], в цикле a.append(int(input())).m = max(a) вычисляется один раз, до второго цикла.Новый список
b строится с пустого: b.append(m - x).Вывод в квадратных скобках →
print(b).Проверка: max = 10 → 10 − 3, 10 − 10, 10 − (−2), 10 − 7 = [7, 0, 12, 3] ✓.
n = int(input())
a = []
for i in range(0, n):
a.append(int(input()))
m = max(a)
b = []
for x in a:
b.append(m - x)
print(b)Объёмы n файлов папки в Кбайтах вводятся в пустой список. Размер кластера 8 Кбайт. Напишите программу, которая выводит общее место (в Кбайтах), занимаемое файлами на диске.
Giriş → Çıxış
3, 20, 8, 1 → 40
4, 16, 17, 7, 40 → 88
Показать решениеСкрыть решение
Число кластеров:
x // 8, плюс 1, если есть остаток (округление вверх).20 Кбайт → 3 кластера = 24 Кбайт; 8 → 8; 1 → 8. Всего 40 ✓.
Проверка 2: 16 + 24 + 8 + 40 = 88 ✓.
n = int(input())
a = []
for i in range(0, n):
a.append(int(input()))
s = 0
for x in a:
k = x // 8
if x % 8 != 0:
k = k + 1
s = s + k * 8
print(s)n целых чисел вводятся в пустой список. Напишите программу, которая выводит количество элементов, больших среднего арифметического.
Giriş → Çıxış
5, 4, 9, 1, 6, 10 → 2
3, 5, 5, 5 → 0
Показать решениеСкрыть решение
m = sum(a) / n вычисляется до цикла; / даёт дробь (6.0) — для сравнения это не помеха.Условие строгое: «больше» →
x > m, а не >=.Проверка: (4 + 9 + 1 + 6 + 10) / 5 = 6; больше 6 — числа 9 и 10 → 2 ✓. Если все элементы равны, ни один не больше среднего → 0.
n = int(input())
a = []
for i in range(0, n):
a.append(int(input()))
m = sum(a) / n
k = 0
for x in a:
if x > m:
k = k + 1
print(k)Семейство 4 — цифры каждого числа. Цифры каждого числа проверяются отдельно; это удобно вынести во вспомогательную функцию (см. урок «Функция: def, параметры и return»). В 2026 году задание «числа, все цифры которых нечётные» было из этого семейства.
Напишите программу, которая из n введённых с клавиатуры натуральных чисел выводит (каждое на своей строке) те, у которых все цифры чётные, а если таких нет — слово yoxdur.
Giriş → Çıxış
4, 248, 1234, 60, 7 → 248 и 60 (в двух строках)
2, 13, 5 → yoxdur
Показать решениеСкрыть решение
even_digits(n) проверяет цифры по одной с конца: как только найдена нечётная цифра — return False; если цикл закончился — return True.Подходящее число выводится внутри цикла (в выводе несколько строк), а счётчик
k нужен для yoxdur.Проверка: 248 → 8, 4, 2 чётные ✓; 1234 → 4 чётная, 3 нечётная ✗; 60 ✓; 7 ✗.
def even_digits(n):
while n > 0:
if n % 10 % 2 == 1:
return False
n = n // 10
return True
n = int(input())
a = []
for i in range(0, n):
a.append(int(input()))
k = 0
for x in a:
if even_digits(x):
print(x)
k = k + 1
if k == 0:
print('yoxdur')Для натуральных чисел a и b (a < b) напишите программу, которая выводит количество чисел-палиндромов (как 121, 44, 7 — не меняются при чтении справа налево) на отрезке [a; b].
Giriş → Çıxış
10, 60 → 5
100, 130 → 3
1, 9 → 9
Показать решениеСкрыть решение
str(x) == str(x)[::-1] — строка совпадает со своим обращением.Можно написать и
x == rev(x) с функцией rev из урока «Функция: def, параметры и return».Проверка: [100; 130]: 101, 111, 121 → 3 ✓. Все однозначные числа — палиндромы.
a = int(input())
b = int(input())
k = 0
for x in range(a, b + 1):
if str(x) == str(x)[::-1]:
k = k + 1
print(k)Семейство 5 — строки. Строка либо читается целиком (s = input()) и обходится посимвольно, либо разрезается на части через split(' '). В 2025 году из этого семейства были задания типа «количество различных символов в строке» и «сумма индексов элементов, которые начинаются с 3 и заканчиваются на 6».
Напишите программу, которая выводит количество символов, встречающихся ровно один раз во введённой с клавиатуры строке.
Giriş → Çıxış
abracadabra → 2
python → 6
10 + 20 = 30 → 5
Показать решениеСкрыть решение
ch проверяется s.count(ch) == 1; пробел — тоже символ.«10 + 20 = 30»: 0 встречается три раза, пробел — четыре; один раз встречаются 1, +, 2, =, 3 → 5 ✓.
Другой вопрос — «количество различных символов» — это другой каркас: добавляй каждый символ в новую строку или список только один раз и в конце выведи
len.s = input()
k = 0
for ch in s:
if s.count(ch) == 1:
k = k + 1
print(k)Элементы списка вводятся в одной строке через один пробел. Напишите программу, которая выводит список индексов элементов, у которых первый и последний символы совпадают, а если таких нет — слово yoxdur.
Giriş → Çıxış
aba 12 x 707 ab 55 → [0, 2, 3, 5]
ab cd → yoxdur
Показать решениеСкрыть решение
a = input().split(' ') даёт элементы в виде строк — переводить в числа не нужно, ведь сравниваются символы.Нужны индексы →
for i in range(0, len(a)); элемент w = a[i], первый символ w[0], последний w[-1].Для односимвольного «x»
w[0] и w[-1] — один и тот же символ → подходит.Проверка: aba (0), x (2), 707 (3), 55 (5) → [0, 2, 3, 5] ✓.
a = input().split(' ')
b = []
for i in range(0, len(a)):
w = a[i]
if w[0] == w[-1]:
b.append(i)
if len(b) == 0:
print('yoxdur')
else:
print(b)Ошибки, которые стоят баллов, и самопроверка
| Ошибка | Что происходит | Исправление |
|---|---|---|
нет int: a = input() | строки склеиваются: '12' + '5' = '125'; сравнение идёт по алфавиту: '9' > '10' | a = int(input()) |
range(1, n) | само n не проверяется: теряется делитель n или конец отрезка b | range(1, n + 1) |
print внутри цикла | много строк вместо одного числа | пиши print после цикла, без отступа |
нет ветки yoxdur | если подходящих чисел нет, выводится 0 или пустой список | после цикла if k == 0: → print('yoxdur') |
| лишний текст в выводе | input('n='), print('k =', k) — вывод не совпадает со столбцом Çıxış | input() и print только того, что требуется |
| счётчик не обнулён | NameError или неверная сумма | k = 0, s = 0, b = [] до цикла |
синтаксис: if x = 5, пропущено :, сбит отступ | программа вообще не запускается | == сравнивает, = присваивает; 4 пробела на блок |
- 1Прогони примеры
Прогони каждый пример Giriş через программу с таблицей переменных; результат должен совпасть со столбцом Çıxış буква в букву.
- 2Проверь границы
Случай без подходящих элементов (
yoxdur), список из одного элемента, сами концы отрезка a и b. - 3Проверь вид вывода
Один
printпосле цикла? Список в скобках? Слово точно как в задании (yoxdur)? - 4Проверь синтаксис
Двоеточия, отступы,
==в условиях, две пары скобок вint(input()). - 5Перечитай условие
«количество» или «сумму»? «нечётные» или «чётные»? «больше» или «больше или равно»?
def solve(a, b):
s = 0
for x in range(a, b + 1):
r = int(x ** 0.5)
if x % 2 == 0 and r * r == x:
s = s + x
if s == 0:
return 'yoxdur'
return s
tests = [(10, 70, 116), (50, 60, 'yoxdur'), (1, 4, 4)]
for a, b, expected in tests:
got = solve(a, b)
print(a, b, got, got == expected)▸ Ожидаемый результат
10 70 116 True 50 60 yoxdur True 1 4 4 True
Готовясь дома, проверяй программу так: преврати вычисление в функцию и запусти сразу все примеры задания. Затем замени b + 1 на b и запусти снова — третий тест даст False. Так выглядит тест, который ловит ошибку: правый конец отрезка (b = 4) сам является ответом.
На экзамене a и b читались бы с клавиатуры (a = int(input()), b = int(input())); здесь они заданы. Выведи количество чисел на отрезке [a; b] с суммой цифр 9, а если таких нет — слово yoxdur.
a = 20
b = 60
# exam version: a = int(input()) and b = int(input())▸ Ожидаемый результат
4
Элементы вводятся в одной строке через один пробел (на экзамене line = input()). Выведи сумму индексов элементов, которые больше предыдущего элемента (перед элементом с индексом 0 элемента нет).
line = '7 12 5 30 8'
# exam version: line = input()▸ Ожидаемый результат
4
Лучший способ подготовиться к письменным заданиям — написать по одной задаче каждого семейства на бумаге на время, а затем проверить её на компьютере на примерах. Чтение программ (закрытые задания и задания с кодируемым ответом) отрабатывается в уроке «Анализ программы: от результата к входным данным», а блок-схема задания 88 — в уроке «Построение блок-схем: письменные задания».
Главное
- Задания 89 и 90 — программы на Python; маркеры ставят 0, ⅓, ½, ⅔ или 1 балл, одно письменное задание весит как два задания с кодируемым ответом.
- Столбец Giriş показывает вызовы
input(), столбец Çıxış — точно то, что нужно вывести. - Каркас всегда одинаков: ввод → счётчик, сумма или пустой список → цикл и условие → вывод после цикла.
- Вывод слова (
yoxdur) требуетif–elseпосле цикла. - Больше всего баллов стоят ошибки: нет
int,range(1, n),printвнутри цикла, лишний текст в выводе.
Проверь себя
Вопросов: 12. Каждый правильный ответ приносит XP.