ЕГЭ по информатике сдают на компьютере, и многие задания удобнее решить программой, чем на бумаге: программа переберёт все варианты и не ошибётся в счёте. Ниже — какие задания решают кодом, что из Python для этого нужно и короткие шаблоны, которые запускаются прямо на странице. Номера заданий даны по демоверсии 2026 года; в проекте 2027 года три задания меняются, об этом — в разделе «Что меняется в ЕГЭ-2027».
Задание программой: перебрать, проверить, посчитать
product выдаёт все 81 слово, проверка оставляет 60. В счёте она не ошибётся — ошибиться можно только в условии проверки, поэтому его сверяют с заданием.Какие задания решают программой
Номера проще запоминать по приёмам: один приём закрывает сразу несколько заданий.
- Перебор вариантов — задания 2, 8, 15 и 25. Программа проверяет все наборы значений, слова или числа и считает подходящие: циклы
for,itertools.productиpermutations. - Двоичная запись и системы счисления — задания 5 и 14:
bin(),int(s, основание)и перевод делением с остатком. - Строки — задания 12 и 24:
replace,count, операторinи проход по строке циклом. - Рекурсия — задания 16, 19–21 и 23: функция, которая вызывает сама себя, и
lru_cache, чтобы не считать одно и то же дважды. - Файлы — задания 17, 24, 26 и 27:
open()читает файл с данными, дальше работают списки и циклы. - Готовые модули — задание 6 решает черепаха
turtle, задание 13 об адресах и масках сети — модульipaddress.
В остальных заданиях программа обычно не нужна: их решают рассуждением или в электронных таблицах.
Что меняется в ЕГЭ-2027
ФИПИ опубликовал проект демоверсии ЕГЭ-2027, и до утверждения его ещё могут поправить. Заданий по-прежнему 27, а темы трёх из них меняются:
- задание 10 о поиске в текстовом редакторе убирают;
- адреса и маски сети переходят из задания 13 в задание 10;
- анализ алгоритма для исполнителя переходит из задания 23 в задание 13;
- новое задание 23 — о графах: поиск оптимального пути и подсчёт путей.
Задания 2, 5, 6, 8 и 19–21 остаются на своих местах, так что их разборы годятся и для 2027 года.
Шаблоны на Python
Перебор: все слова из букв
itertools.product выдаёт все наборы букв нужной длины. Это задача со схемы выше: слова из четырёх букв К, О, Д без двух О подряд.
from itertools import product
count = 0
for w in product('КОД', repeat=4):
word = ''.join(w)
if 'ОО' not in word:
count += 1
print(count)
60
product выдаёт кортежи вроде ('К', 'О', 'Д', 'К'), а ''.join(w) склеивает их в слово. Если буквы в слове повторяться не могут, вместо product берут permutations.
Системы счисления
print(bin(13)[2:])
print(int('1101', 2), int('1A', 16))
def digits(n, base):
result = []
while n > 0:
result.append(n % base)
n //= base
return result[::-1]
print(digits(100, 3))
print(digits(255, 16))
1101
13 26
[1, 0, 2, 0, 1]
[15, 15]
bin()возвращает строку с приставкой0b, срез[2:]её убирает.int(s, base)переводит запись в число из любой системы счисления от 2 до 36.- Обратно Python переводит только в двоичную, восьмеричную и шестнадцатеричную системы (
bin,oct,hex), поэтому для остальных пишут свою функцию: остаток от деления на основание — очередная цифра справа.digitsвозвращает цифры списком, так что основание может быть и больше 10, а число нулей в записи — этоdigits(n, base).count(0).
Рекурсия с памятью
В задании 16 функцию задают через саму себя. Например, F(n) = 1 при n ≤ 2 и F(n) = F(n − 1) + F(n − 2) при n > 2. Чему равно F(100)?
from functools import lru_cache
@lru_cache(None)
def f(n):
if n <= 2:
return 1
return f(n - 1) + f(n - 2)
print(f(100))
354224848179261915075
Без @lru_cache(None) программа не закончится: каждое значение считается заново, и вызовов становится больше, чем компьютер успеет выполнить. С ним каждое F(n) считается один раз. Если цепочка вызовов уходит глубже 1000, Python останавливает её с RecursionError — тогда поднимают предел через sys.setrecursionlimit или считают значения по порядку циклом.
Файл с данными
Задания 17, 24, 26 и 27 дают файл с данными, и программа читает его через open(). На этой странице файла задания нет, поэтому первые две строки примера создают его сами:
with open('17.txt', 'w') as f:
f.write('5\n-3\n10\n')
with open('17.txt') as f:
nums = [int(x) for x in f]
print(len(nums), sum(nums), max(nums))
3 12 10
В задании файл уже дан, и нужна только вторая часть. for x in f идёт по строкам файла, а int(x) превращает строку в число и сам отбрасывает перевод строки.
Частые ошибки
print(list(range(1, 5)))
print(6 / 2, 7 // 2, 7 % 2)
print('10' < '9', 10 < 9)
print(bin(5), bin(5)[2:])
[1, 2, 3, 4]
3.0 3 1
True False
0b101 101
range(1, 5)не включает 5. Если в условии «от 1 до N включительно», пишиrange(1, N + 1)./всегда даёт дробное число, даже6 / 2— это3.0. Целая часть —//, остаток —%.- Строки сравниваются по символам:
'10' < '9', потому что'1'меньше'9'. Числа из файла сначала переводи вint. bin()начинается с0b: без среза[2:]и длина записи, и число нулей в ней выйдут неверными.
Где тренироваться
Ставить Python для тренировки не обязательно: песочница Python запускает код в браузере — и на школьном компьютере, где ничего нельзя установить, и на телефоне. Файл задания перетащи на страницу песочницы: он появится в проекте, и open('17.txt') его прочитает. Песочница хранит текстовые файлы до 200 КБ.
Разборы отдельных заданий с запускаемым кодом: задание 2 о таблице истинности, задание 5 о двоичной записи, задание 6 о черепахе, задание 8 о переборе слов, задание 12 об исполнителе Редактор, задание 13 об IP-адресах и масках, задание 14 о системах счисления, задание 15 об отрезках и делимости, задание 16 о рекурсивных функциях, задание 17 о парах чисел из файла и задания 19–21 о теории игр.