</>Владимир ЗатолочныйИНФОРМАТИКА · ЕГЭКабинет ученика ↗
СПРАВОЧНИК / ОТ ОСНОВ К ПРАКТИКЕ

Python под рукой.

От первых понятий до отдельных команд и алгоритмических приёмов. Выбирай тему, открывай подробный разбор и пробуй примеры в онлайн Python.

Перейти к тренажёру ↗
Я начинаю с нуля ↓Найти команду ↓Запустить Python ↗

Подсказки по номерам — ориентиры применения Python, а не обязательный способ решения. Темы соотнесены со структурой ЕГЭ по информатике ФИПИ.

Краткие таблицы остаются видимыми
СТАРТ / ПОНЯТНЫЙ ЯЗЫК

Что такое Python и как его читать

Где пригодится на ЕГЭ База для программных решений: № 5, 16, 17, 23–27; чтение простых алгоритмов помогает и в других темах.

Этот справочник можно читать с нуля. Сначала разберись в словах, затем переходи к командам. Примеры — самостоятельные программы; их можно копировать целиком в онлайн Python.

Язык программирования
Формальный язык для записи действий и правил, которые выполняет компьютер. Он задаёт синтаксис — как записывать программу, и семантику — что запись означает.
Python и интерпретатор
Python — язык, а интерпретатор — программа, выполняющая код. В CPython исходный текст обычно сначала компилируется в байткод, который исполняет виртуальная машина. Для начала достаточно писать файл .py и запускать его.
Алгоритм и программа
Алгоритм — последовательность шагов решения. Программа — запись алгоритма на языке программирования. Один алгоритм можно реализовать на разных языках.
«Команда», инструкция и выражение
«Команда» — удобное разговорное слово. Точнее различать инструкции, например присваивание или if, и выражения, которые вычисляют значение, например 2 + 3 или len(s). Вызов print() — выражение с побочным эффектом вывода.
Синтаксис и отступы
После if, for, while, def и других заголовков блока ставят двоеточие. Тело блока выделяется отступом; обычно используют четыре пробела. Не смешивай табуляции и пробелы.
Комментарий
Текст после # до конца строки, вне строкового литерала, не выполняется. Комментарий объясняет замысел; он не заменяет исполняемый код.
Переменная и объект
Имя переменной связывается с объектом. Тип принадлежит объекту, а имя можно связать с другим объектом. Присваивание само по себе не копирует список или словарь.
Тип данных

От типа зависят доступные операции. Основные типы:

  • int — целые числа. Пример: 12, -7, 0.
  • float — числа с плавающей точкой. Пример: 2.5, -0.75.
  • bool — логические значения. Пример: True, False.
  • str — строки. Пример: "Python", "123".
  • list — изменяемые списки. Пример: [2, 5, 8].
  • tuple — неизменяемые кортежи. Пример: (2, 5, 8).
  • set — множества уникальных элементов. Пример: {2, 5, 8}.
  • dict — словари: ключ → значение. Пример: {"score": 90}.

Например, 12 + 3 даёт число 15, а "12" + "3" — строку "123". float хранит многие десятичные дроби приближённо.

Изменяемость
Списки, словари и множества можно менять на месте. Строки, числа и кортежи неизменяемы; при этом кортеж может содержать изменяемый список.
Итерируемый объект и итератор
По итерируемому объекту можно пройти циклом for. Итератор помнит текущую позицию и исчерпывается. list и range допускают повторный проход, а map — одноразовый итератор.
Исключение
Сообщение о невозможности выполнить операцию: например деление на ноль или преобразование неподходящей строки. Traceback показывает цепочку вызовов и строку ошибки.

Программа — это последовательность действий

Python 3
price = 120
count = 3
total = price * count
print(total)
Результат
360

Здесь первые две строки связывают имена с числами, третья вычисляет произведение, четвёртая выводит результат. Оператор = — присваивание; * — умножение; print — встроенная функция.

Почему важно отличать имя от копии

Python 3
a = [1, 2]
b = a
b.append(3)
print(a)
x = 5
y = x
x = 9
print(x, y)
Результат
[1, 2, 3]
9 5

Имена a и b указывают на один список: изменение через b видно через a. Присваивание x = 9 связывает x с другим целым числом; значение y остаётся 5.

СТАРТ / ФУНКЦИИ И МОДУЛИ

Функция, метод, модуль и аргументы

Где пригодится на ЕГЭ № 16, 19–21, 23 — свои функции и повторяющиеся вычисления; № 25 — математические функции; № 8 — itertools.

Функция

Вызываемый объект для отдельной задачи. Вызов записывается с круглыми скобками. Свои функции объявляют через def; многие полезные функции уже встроены в Python и не требуют import.

Своя функция: вычислить квадрат

Python 3
def square(x):
    return x * x

result = square(7)
print(result)
Результат
49

x — параметр, 7 — аргумент, return передаёт результат 49 вызывающему коду. print выводит полученное значение.

Встроенная функция: измерить длину

Python 3
word = "Python"
size = len(word)
print(size)
Результат
6

len и print уже доступны при запуске. Здесь «системная функция» точнее называется встроенной; это не команда операционной системы.

Метод
Операция объекта или класса, которую обычно вызывают через точку: s.strip(). Она может вернуть новое значение или изменить сам объект — это нужно узнавать для каждого метода.
Модуль и библиотека

Модуль — отдельная единица кода, часто файл .py. Библиотека — набор готовых возможностей; она может состоять из одного модуля или нескольких пакетов и модулей. Например, math и itertools входят в стандартную библиотеку Python. Эти термины связаны, но не полностью равнозначны.

1. Подключить модуль целиком

Python 3
import math
print(math.isqrt(50))
Результат
7

Имя math обозначает модуль. Чтобы вызвать его функцию, пишем math.isqrt(...).

2. Импортировать нужную функцию

Python 3
from math import isqrt
print(isqrt(50))
Результат
7

В текущем пространстве имён появится isqrt, а не имя math.

3. Дать модулю короткое имя

Python 3
import math as m
print(m.isqrt(50))
Результат
7

Псевдоним m можно выбрать самостоятельно. Для большого проекта лучше сохранять привычные имена.

Как посмотреть содержимое модуля

Python 3
import math
print("isqrt" in dir(math))
print(math.isqrt.__name__)
Результат
True
isqrt

dir(math) возвращает список имён модуля; print(dir(math)) выведет его. help(math.isqrt) покажет справку по функции в среде, которая поддерживает такой вывод. Конструкция from math import * импортирует все публичные имена, но для учебных решений понятнее явно перечислять нужные функции.

Параметр и аргумент
В def square(x) имя x — параметр. В square(7) число 7 — аргумент. Аргументы передают по позиции либо по имени, например print(1, 2, sep=";").
Возвращаемое значение и побочный эффект
len(s) возвращает число. print(s) выводит текст и возвращает None. a.append(x) изменяет список и тоже возвращает None. Эти действия нельзя считать взаимозаменяемыми.
Python 3
from math import isqrt
s = "  python  "
print(len(s))
print(s.strip().upper())
print(isqrt(50))
Результат
10
PYTHON
7
СТАРТ / ДЕКОРАТОРЫ

Что означает @ над функцией

Где пригодится на ЕГЭ № 16, 19–21, 23 — кеширование повторяющихся рекурсивных вызовов, если выбран такой способ решения.

Декоратор — вызываемый объект, который получает функцию или класс и возвращает объект-замену. Он позволяет добавить поведение при определении. Для одной функции запись @announce над def hello эквивалентна последующему hello = announce(hello).

Python 3
def announce(function):
    def wrapper():
        print("Начало")
        return function()
    return wrapper

@announce
def hello():
    print("Привет!")

hello()
Результат
Начало
Привет!

announce получает исходную функцию и возвращает wrapper. При вызове hello() обёртка печатает «Начало», затем вызывает сохранённую функцию. Само декорирование происходит при выполнении определения, а не только при первом вызове.

В подготовке к ЕГЭ часто полезен @lru_cache(None): он запоминает результаты повторяющихся вызовов рекурсивной функции. Это не новая команда языка, а декоратор из модуля functools. Его подробный пример находится в теме «Функции и рекурсия».

Не путай: @ в строке над def обозначает синтаксис декорирования. Между операндами @ также может означать матричное умножение, если их тип поддерживает такую операцию. Для начала подготовки создавать свои сложные декораторы необязательно.

СТАРТ / ОШИБКИ И ПЛАН ОБУЧЕНИЯ

Как читать ошибку и с чего начать

Где пригодится на ЕГЭ Любые программные решения, особенно № 16, 17, 24–27: поиск ошибок перед получением ответа.

  1. Начни с последней строки сообщения: в ней тип ошибки и пояснение.
  2. Найди строку своего файла в traceback. При SyntaxError проверь также предыдущую строку: там мог не хватить скобки или двоеточия.
  3. Проверь типы и значения переменных через print(). Исправь причину и запусти программу заново.
SyntaxError / IndentationError
Неверная запись или отступы. Проверь двоеточия, скобки, кавычки и границы блоков.
NameError / TypeError
Не найдено имя либо операция не поддерживает переданные типы. Проверь опечатки и преобразования input().
ValueError / IndexError / KeyError
Неподходящее значение для преобразования, индекс за границей или отсутствующий ключ словаря.
ZeroDivisionError / EOFError / RecursionError
Нулевой делитель, недостаточно входных данных либо слишком глубокая рекурсия.

Маршрут для новичка: ввод и типы → арифметика → условия → циклы → строки и списки → файлы → функции → алгоритмические приёмы. Декораторы и оптимизации изучай после уверенного владения функциями.

Открыть онлайн Python для практики ↗
01 / PYTHON

Ввод, вывод и типы

Где пригодится на ЕГЭ № 17, 24–27 — чтение исходных данных, преобразование типов и вывод ответа.

Прочитать данные и преобразовать их в числа.

Команда / конструкцияКогда использовать
input()Читает одну строку без завершающего перевода строки.
int(x), float(x), str(x)Преобразование типов. int(3.9) даёт 3 (к нулю); int("3.9") вызывает ValueError. В float строка должна содержать точку, а не десятичную запятую.
map(int, s.split())Ленивый итератор чисел из строки. split() без аргументов разделяет по любым пробельным символам, объединяя соседние разделители.
print(*a, sep=" ")Выводит элементы последовательности с выбранным разделителем.
Пример
s = "12 7"
a, b = map(int, s.split())
print(a + b)
Результат
19

Запомни: input() возвращает строку. Для сложения чисел сначала используй int(). map — итератор: для повторного использования сохрани его в list().

Ещё пример: важные нюансы
Проверь поведение
print(int(3.9), int(-3.9))
print(list(map(int, "1  2\t3".split())))
Результат
3 -3
[1, 2, 3]

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

input(): получить строку

Как записывается

input(prompt)

Что делает

Возвращает одну строку без завершающего перевода строки. Не превращает её в число. Необязательный prompt выводится перед чтением.

Когда применять

Для данных задачи: один вызов читает одну строку. В автоматической проверке обычно не добавляют подсказку prompt.

Python 3
n = int(input())
print(n + 5)
Результат
17

Ввод: 12

Частая ошибка: Если введено 12, input() даёт строку "12". Выражение input() + 5 вызовет TypeError. Если ввод закончился, возникнет EOFError.

Проверить пример в онлайн Python ↗
print(): вывести результат

Как записывается

print(*objects, sep=" ", end="\n")

Что делает

Печатает объекты, отделяя их sep и завершая вывод строкой end. Возвращает None, а не напечатанный текст.

Когда применять

Вывести несколько ответов в одну строку, проверить промежуточные значения.

Python 3
print(2, 5, 8, sep=";")
print("A", end="")
print("B")
Результат
2;5;8
AB

Частая ошибка: Не записывай x = print(...), если нужен результат вычисления: в x окажется None.

Проверить пример в онлайн Python ↗
int(), float(), str(): преобразовать тип

Как записывается

int(x), float(x), str(x)

Что делает

int преобразует допустимую строку или число в целое; у float отбрасывает дробную часть к нулю. float создаёт вещественное число, str — строку.

Когда применять

Подготовить ввод для вычислений или превратить число в строку для анализа цифр.

Python 3
print(int("17") + 3)
print(int(-3.9))
print(float("2.5") * 2)
print(str(12) + "3")
Результат
20
-3
5.0
123

Частая ошибка: int("2.5") не работает. Для дробной строки нужен float; десятичный разделитель — точка.

Проверить пример в онлайн Python ↗
map(): применить функцию к элементам

Как записывается

map(function, iterable)

Что делает

Возвращает ленивый итератор: функция вызывается по мере чтения элементов. Сам map не создаёт готовый список.

Когда применять

Прочитать несколько целых чисел: list(map(int, input().split())).

Python 3
values = map(int, "4 7 9".split())
a = list(values)
print(a)
print(list(values))
Результат
[4, 7, 9]
[]

Частая ошибка: Итератор исчерпывается после прохода. Если данные нужны несколько раз, сохрани list(map(...)).

Проверить пример в онлайн Python ↗
02 / PYTHON

Арифметика и цифры

Где пригодится на ЕГЭ № 7, 11 — объём информации; № 14 — разряды; № 17, 25 — делимость и работа с цифрами.

Работать с делимостью, степенями и цифрами числа.

Команда / конструкцияКогда использовать
//Деление с округлением вниз: 17 // 5 = 3, а −7 // 3 = −3.
%Для целых n и ненулевого d: остаток от деления; ненулевой остаток имеет знак d. n % d == 0 проверяет делимость.
**Возведение в степень: 2 ** 10 = 1024.
abs(x), divmod(n, d)abs(x) — модуль; divmod(n, d) — пара (n // d, n % d), d не должен быть нулём.
Пример
n = 352
s = 0
while n > 0:
    s += n % 10
    n //= 10
print(s)
Результат
10

Запомни: Для положительных целых n % 10 даёт последнюю цифру, n // 10 удаляет её. Оператор ^ — побитовое XOR, а не степень.

Ещё пример: важные нюансы
Проверь поведение
print(-7 // 3, -7 % 3)
print(divmod(-7, 3))
Результат
-3 2
(-3, 2)

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

/ и //: два вида деления

Как записывается

a / b; a // b

Что делает

/ для целых операндов возвращает float. // вычисляет частное, округлённое вниз; при целых операндах возвращает int.

Когда применять

/ — когда нужна дробь; // — для количества полных групп, разрядов и целочисленных формул.

Python 3
print(7 / 2, 7 // 2)
print(-7 // 2, int(-7 / 2))
Результат
3.5 3
-4 -3

Частая ошибка: Округление вниз отличается от отбрасывания дробной части у отрицательных чисел. Делить на ноль нельзя.

Проверить пример в онлайн Python ↗
% и divmod(): остаток и частное

Как записывается

a % b; divmod(a, b)

Что делает

Для целых a и ненулевого b выполняется a = (a // b)*b + a % b. divmod возвращает пару (частное, остаток).

Когда применять

Проверить делимость, извлечь последнюю цифру, разложить время на часы и минуты.

Python 3
minutes = 143
h, m = divmod(minutes, 60)
print(h, m)
print(352 % 10, 352 // 10)
print(-7 % 3)
Результат
2 23
2 35
2

Частая ошибка: Ненулевой остаток имеет знак делителя. Привычное правило «остаток всегда положителен» требует положительного делителя.

Проверить пример в онлайн Python ↗
** и pow(): возведение в степень

Как записывается

a ** b; pow(a, b, mod)

Что делает

** вычисляет степень. pow(a, b, mod) для допустимых целых аргументов вычисляет степень по модулю, не создавая гигантское целое a**b.

Когда применять

Системы счисления, комбинаторика и задачи с остатками.

Python 3
print(2 ** 10)
print(pow(2, 10, 7))
print(-2 ** 2, (-2) ** 2)
Результат
1024
2
-4 4

Частая ошибка: ^ означает XOR. Унарный минус в -2**2 применяется после возведения в степень; для отрицательного основания нужны скобки.

Проверить пример в онлайн Python ↗
03 / PYTHON

Условия и логика

Где пригодится на ЕГЭ № 2, 15 — логические выражения; № 17, 25, 26 — условия отбора данных.

Записывать ограничения и проверять варианты.

Команда / конструкцияКогда использовать
if condition: pass elif other_condition: pass else: passВыполнить одну из ветвей программы.
==, !=, <, <=, >, >=Операторы сравнения в Python. Меньше или равно записывается <=, больше или равно — >=; проверка равенства — ==. Пример цепочки: 10 <= x < 100.
and, or, notДля булевых значений — И, ИЛИ, НЕ. and и or возвращают один из операндов и используют сокращённую проверку, а not всегда возвращает bool. Приоритет: not → and → or.
!=Не равно: x != y. Записывается двумя отдельными символами: восклицательный знак и знак равенства.
(not A) or BИмпликация A → B для логических условий A и B. Не подменяй её числовым сравнением произвольных A и B.
Пример
for x in range(1, 11):
    if x % 2 == 0 and x % 3 != 0:
        print(x, end=" ")
Результат
2 4 8 10

Запомни: Не путай присваивание = и сравнение ==. Для сложных логических выражений явно ставь скобки. Побитовые & и | не заменяют and и or для произвольных значений.

Ещё пример: важные нюансы
Проверь поведение
print(3 != 5, 3 == 5)
print(0 or 7, 2 and 9)
A, B = True, False
print((not A) or B)
Результат
True False
7 9
False

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

==, !=, <, <=, >, >=: сравнения

Как записывается

x != y; 10 <= x < 100

Что делает

Для чисел и строк сравнения дают True или False. != — два символа: ! и =. Цепочка сравнений проверяет оба ограничения.

Когда применять

Отбирать числа по условиям. Сравнение == проверяет равенство значений, = выполняет присваивание.

Python 3
x = 12
print(x != 10)
print(10 <= x < 100)
print("10" < "2")
Результат
True
True
True

Частая ошибка: Строки сравниваются лексикографически. Не сравнивай числа из input() как строки, если требуется числовой порядок.

Проверить пример в онлайн Python ↗
and, or, not: логические связки

Как записывается

condition1 and condition2

Что делает

and возвращает первый ложный операнд либо последний; or — первый истинный либо последний. Оба используют сокращённое вычисление. not всегда возвращает bool.

Когда применять

Соединять ограничения и безопасно проверять выражения, например n != 0 and 10 % n == 0.

Python 3
print(0 or 7)
print(2 and 9)
print(not [])
n = 0
print(n != 0 and 10 % n == 0)
Результат
7
9
True
False

Частая ошибка: and и or не обязаны возвращать True или False. Приоритет: not, затем and, затем or; в сложном выражении ставь скобки.

Проверить пример в онлайн Python ↗
if, elif, else: выбрать ветку

Как Python выбирает ветку

  1. if проверяет первое условие. Если оно истинно, выполняется его блок.
  2. elif означает «иначе, если»: проверяется только тогда, когда все предыдущие условия ложны. Таких ветвей может быть несколько или ни одной.
  3. else не содержит условия и выполняется, если ни одна предыдущая ветка не подошла. Эта ветка необязательна.
  4. После выполнения одной ветви программа продолжает работу после всей конструкции. Остальные ветви этой цепочки не выполняются.

Общий шаблон

if condition:
    action()
elif other_condition:
    other_action()
else:
    fallback_action()

В шаблоне используются условные имена: замени их своими условиями и действиями. После if и elif нужно выражение; после else его нет. В конце каждого заголовка ставится двоеточие, а тело записывается с отступом.

Пример: классифицировать число

Python 3
n = -4
if n > 0:
    print("Положительное")
elif n == 0:
    print("Ноль")
else:
    print("Отрицательное")
print("Проверка завершена")
Результат
Отрицательное
Проверка завершена

Почему важен порядок условий

Python 3
score = 95
if score >= 90:
    print("Отличный результат")
elif score >= 70:
    print("Хороший результат")
else:
    print("Продолжаем практику")
Результат
Отличный результат

Хотя 95 удовлетворяет обоим неравенствам, выбирается только первая ветвь. Если сначала поставить score >= 70, оценка 95 попадёт туда, а ветка >= 90 не будет достигнута.

Два if и одна цепочка if/elif — разные конструкции

Python 3
n = 12
if n > 0:
    print("Положительное")
if n % 2 == 0:
    print("Чётное")
Результат
Положительное
Чётное

Здесь проверки независимы, поэтому выполняются обе. Если нужны взаимоисключающие варианты — используй if/elif/else. Для проверки диапазона удобно писать 10 <= n < 100.

Частые ошибки: забытое двоеточие, неверный отступ, else с условием, присваивание = вместо сравнения ==. Условия могут быть любыми выражениями: ноль и пустые коллекции считаются ложными.

04 / PYTHON

Циклы и перебор

Где пригодится на ЕГЭ № 5, 8, 14, 17, 24–27 — перебор вариантов и последовательная обработка данных.

Повторять действия, считать количество и сумму.

Команда / конструкцияКогда использовать
range(start, stop, step)Диапазон целых чисел с ненулевым шагом; stop не включается. При положительном шаге идут, пока число < stop, при отрицательном — пока > stop. range(n) — от 0 до n − 1 при n > 0.
for x in a:Перебор элементов последовательности.
while condition:Повторять блок, пока условие истинно.
break continueЗавершить ближайший охватывающий цикл / перейти к следующей его итерации. Во вложенных циклах break не выходит сразу из всех циклов.
enumerate(a)Получать одновременно индекс и значение.
Пример
total = 0
for x in range(2, 11, 2):
    total += x
print(total)
Результат
30

Запомни: В range шаг не может быть нулём. При обратном проходе используй отрицательный шаг. В while меняй данные, от которых зависит условие, чтобы избежать бесконечного цикла.

Ещё пример: важные нюансы
Проверь поведение
print(list(range(5, 0, -2)))
print(list(range(0, 5, -1)))
Результат
[5, 3, 1]
[]

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

range(): границы и шаг

Как записывается

range(stop); range(start, stop, step)

Что делает

Объект диапазона целых чисел. stop не включается; шаг ненулевой. Можно проходить повторно, получать длину и элементы по индексу.

Когда применять

Задать номера итераций, индексы или перебор с нужной кратностью.

Python 3
print(list(range(2, 9, 3)))
print(list(range(5, 0, -2)))
print(list(range(0, 5, -1)))
Результат
[2, 5, 8]
[5, 3, 1]
[]

Частая ошибка: Направление шага должно соответствовать границам, иначе диапазон пустой. range — не список и не одноразовый итератор.

Проверить пример в онлайн Python ↗
for: перебор элементов

Как записывается

for value in iterable:
    ...

Что делает

По очереди присваивает переменной элементы перебираемого объекта. Переменная может получать символы, числа или кортежи.

Когда применять

Обработать все числа списка; индексы не нужны, если достаточно самих значений.

Python 3
total = 0
for x in [2, 5, 8]:
    total += x
print(total)
Результат
15

Частая ошибка: Не обязательно писать for i in range(len(a)): for x in a проще, если индекс не используется.

Проверить пример в онлайн Python ↗
while: повторять по условию

Как записывается

while condition:
    ...

Что делает

Проверяет условие перед каждой итерацией; тело может не выполниться ни разу.

Когда применять

Разбирать цифры числа или повторять действия, пока не достигнут результат.

Python 3
n = 352
count = 0
while n > 0:
    count += 1
    n //= 10
print(count)
Результат
3

Частая ошибка: Меняй состояние, влияющее на условие. У числа 0 одна цифра, но этот цикл выполнится ноль раз: такой случай нужно обработать отдельно.

Проверить пример в онлайн Python ↗
break и continue: управлять циклом

Как записывается

break; continue

Что делает

break завершает ближайший охватывающий цикл; continue пропускает оставшуюся часть его текущей итерации.

Когда применять

Остановиться после первого решения или пропустить неподходящие данные.

Python 3
for x in range(1, 10):
    if x % 2 == 0:
        continue
    if x > 5:
        break
    print(x)
Результат
1
3
5

Частая ошибка: Во вложенных циклах break не завершает все циклы сразу. В while не ставь continue перед необходимым обновлением счётчика.

Проверить пример в онлайн Python ↗
enumerate(): индекс и значение

Как записывается

enumerate(iterable, start=0)

Что делает

Возвращает итератор пар (счётчик, элемент). start меняет начальное значение счётчика, а не элементы исходного объекта.

Когда применять

Выводить номера элементов или одновременно использовать позицию и значение.

Python 3
for i, value in enumerate([8, 4, 9], start=1):
    print(i, value)
Результат
1 8
2 4
3 9

Частая ошибка: Счётчик start=1 удобен для человека, но индексы самого списка по-прежнему начинаются с 0.

Проверить пример в онлайн Python ↗
05 / PYTHON

Строки и срезы

Где пригодится на ЕГЭ № 5, 14 — записи чисел; № 24 — фрагменты и свойства строк; № 25 — маски чисел.

Искать символы, выделять фрагменты и заменять подстроки.

Команда / конструкцияКогда использовать
s[i], s[-1]Символ по индексу; −1 — последний. Индексация начинается с 0.
s[a:b:c]Срез с ненулевым шагом c, граница b не включается. При c > 0 движение слева направо, при c < 0 — справа налево. Пропущенные границы зависят от знака шага.
len(s), s.count(t), s.find(t)Длина; число непересекающихся вхождений; индекс первого вхождения или −1.
s.replace(a, b)Новая строка с заменой всех вхождений a на b.
s.strip(), s.split(), "".join(a)strip() убирает пробельные символы по краям. split() без аргумента делит по сериям пробельных символов. join(a) соединяет только строки; числа сначала преобразуй в str.
s.startswith(t), s.endswith(t)Проверка начала и конца строки. Возвращают True или False.
Пример
s = "0123456789"
print(s[1:8:2])
print(s[::-1])
Результат
1357
9876543210

Запомни: Строка неизменяема: результат replace() нужно присвоить. count() не считает перекрывающиеся вхождения. strip("abc") удаляет любые символы a, b, c с краёв, а не целую подстроку.

Ещё пример: важные нюансы
Проверь поведение
s = "ABCDE"
print(s[4:0:-2])
print("aaaa".count("aa"))
print("  a  b  ".split())
Результат
EC
2
['a', 'b']

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

Индексы и срезы

1. Индекс выбирает один элемент

Индексы начинаются с нуля. Отрицательные считаются с конца: -1 — последний элемент, -2 — предпоследний. Для строки s = "ABCDE":

СимволABCDE
Индекс слева01234
Индекс с конца-5-4-3-2-1

2. Срез: начало, конец и шаг

s[start:stop:step]
  • start — позиция, с которой начинаем; она включается.
  • stop — граница, до которой идём; она не включается.
  • step — ненулевой шаг. Положительный идёт вправо, отрицательный — влево.
Python 3
s = "ABCDE"
print(s[1:4])
print(s[::2])
print(s[-3:])
print(s[:-1])
Результат
BCD
ACE
CDE
ABCD

3. Пропущенные границы

При положительном шаге пропущенное начало — первый элемент, конец — граница после последнего. При отрицательном шаге начало — последний элемент, конец — граница перед первым. Поэтому s[:] копирует последовательность, а s[::-1] разворачивает её.

Python 3
s = "ABCDE"
print(s[4:0:-2])
print(s[::-1])
print(repr(s[4:-1:-1]))
print(s[4::-1])
Результат
EC
EDCBA
''
EDCBA

В s[4:-1:-1] явный индекс -1 означает последний элемент, то есть ту же позицию 4. Начало совпало с исключённой границей — срез пустой. Пропущенная граница в s[4::-1] означает движение до начала строки и не равна явному -1.

4. Направление и выход за границы

Python 3
s = "ABCDE"
print(repr(s[4:1]))
print(s[1:99])
print(repr(s[99:]))
Результат
''
BCDE
''

В первом случае шаг по умолчанию +1, но начало правее конца, поэтому элементов нет. Срезы обрезают слишком большие границы, тогда как отдельный индекс s[99] вызовет IndexError.

5. Те же правила работают для списков

Python 3
a = [10, 20, 30, 40, 50]
print(a[1:4:2])
print(a[::-1])
print(a)
Результат
[20, 40]
[50, 40, 30, 20, 10]
[10, 20, 30, 40, 50]

Срез списка создаёт поверхностную копию: сам внешний список новый, но вложенные изменяемые объекты могут остаться общими. Срез строки создаёт значение строки; исходная последовательность не меняется.

Запомни: правая граница не включается; нулевой шаг вызывает ValueError; отрицательный индекс и отрицательный шаг — разные вещи.

find() и count(): поиск подстрок

Как записывается

s.find(part); s.count(part)

Что делает

find возвращает индекс первого вхождения или -1; count — число неперекрывающихся вхождений. Исходная строка не меняется.

Когда применять

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

Python 3
s = "ababa"
print(s.find("ba"))
print(s.find("x"))
print(s.count("aba"))
print(sum(s[i:i+3] == "aba" for i in range(len(s)-2)))
Результат
1
-1
1
2

Частая ошибка: Для перекрывающихся вхождений count недостаточно. Не проверяй find через if s.find(...): индекс 0 ложен, а -1 истинен.

Проверить пример в онлайн Python ↗
replace(): заменить фрагмент

Как записывается

s.replace(old, new, count)

Что делает

Возвращает новую строку с заменами. Необязательный count ограничивает количество замен.

Когда применять

Моделировать правила замены символов или нормализовать запись.

Python 3
s = "aaaa"
result = s.replace("aa", "b", 1)
print(result)
print(s)
Результат
baa
aaaa

Частая ошибка: Строки неизменяемы: без присваивания результат потеряется. Несколько последовательных replace могут затронуть уже заменённые символы.

Проверить пример в онлайн Python ↗
split() и join(): разделить и собрать

Как записывается

s.split(); separator.join(strings)

Что делает

split без аргумента делит по группам пробельных символов. join соединяет строки, вставляя разделитель между ними.

Когда применять

Прочитать числа или собрать строку из цифр и слов.

Python 3
parts = "  12   7\t5  ".split()
print(parts)
print("-".join(parts))
print("a,,b".split(","))
Результат
['12', '7', '5']
12-7-5
['a', '', 'b']

Частая ошибка: split(" ") и split() ведут себя по-разному. Для join список чисел сначала преобразуй: map(str, numbers).

Проверить пример в онлайн Python ↗
strip(): убрать символы по краям

Как записывается

s.strip(); s.strip(chars)

Что делает

Создаёт строку без пробельных символов по краям либо без любых крайних символов из набора chars. Внутри строки ничего не удаляет.

Когда применять

Убрать перевод строки и внешние пробелы из считанной строки файла.

Python 3
print(repr("  A B\n".strip()))
print("abbaXba".strip("ab"))
Результат
'A B'
X

Частая ошибка: chars — набор отдельных символов, не целая подстрока. Чтобы убрать ровно заданный префикс, используй removeprefix().

Проверить пример в онлайн Python ↗
06 / PYTHON

Списки и сортировка

Где пригодится на ЕГЭ № 17 — числовые последовательности; № 26 — сортировка; № 27 — хранение и обработка данных.

Хранить последовательности чисел и искать нужные элементы.

Команда / конструкцияКогда использовать
list(iterable), [int(x) for x in s.split()]Создание списка; списковое включение с преобразованием.
a.append(x), a.pop()append(x) добавляет один объект в конец. pop() удаляет и возвращает последний элемент; для пустого списка вызывает IndexError.
sum(a), min(a), max(a), len(a)Сумма, минимум, максимум, длина. sum([]) даёт 0; min([]) и max([]) без default вызывают ValueError.
sorted(a), sorted(a, reverse=True)Новый отсортированный список по возрастанию / убыванию.
sorted(a, key=lambda x: x[1])Сортировка записей по второму полю.
Пример
a = [7, 2, 9, 4]
b = sorted(a)
print(b)
print(sum(b[-2:]))
Результат
[2, 4, 7, 9]
16

Запомни: a.sort() изменяет список и возвращает None. Для копии используй a.copy() или a[:]; b = a создаёт вторую ссылку на тот же список. Не удаляй элементы из списка во время прямого перебора по нему. Копия через a[:] поверхностная: вложенные списки остаются общими. Строки сортируются лексикографически: "10" меньше "2"; для чисел преобразуй тип.

Ещё пример: важные нюансы
Проверь поведение
a = [3, 1, 2]
result = a.sort()
print(a, result)
print(sorted(["2", "10"]))
Результат
[1, 2, 3] None
['10', '2']

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

Списковое включение: создать и отобрать

Как записывается

[expression for x in iterable if condition]

Что делает

Создаёт новый список, вычисляя expression для элементов, прошедших необязательное условие.

Когда применять

Собрать квадраты чётных чисел или преобразовать ввод.

Python 3
a = [1, 2, 3, 4, 5]
squares = [x * x for x in a if x % 2 == 0]
print(squares)
print(a)
Результат
[4, 16]
[1, 2, 3, 4, 5]

Частая ошибка: Для длинной или сложной логики обычный for читается лучше. Включение создаёт список целиком, что требует памяти.

Проверить пример в онлайн Python ↗
append(), extend(), pop(): менять список

Как записывается

a.append(x); a.extend(iterable); a.pop(index)

Что делает

append добавляет один объект; extend добавляет все элементы; pop удаляет и возвращает элемент, по умолчанию последний.

Когда применять

Накапливать ответы или поддерживать стек.

Python 3
a = [1]
a.append([2, 3])
a.extend([4, 5])
print(a)
print(a.pop())
print(a)
Результат
[1, [2, 3], 4, 5]
5
[1, [2, 3], 4]

Частая ошибка: append и extend возвращают None. pop пустого списка вызывает IndexError.

Проверить пример в онлайн Python ↗
sorted() и sort(): сортировка

Как записывается

sorted(a, key=..., reverse=False); a.sort()

Что делает

sorted создаёт новый список из перебираемого объекта. Метод sort изменяет сам список и возвращает None. Сортировка стабильна.

Когда применять

Упорядочить числа, файлы по размеру или записи по отдельному полю.

Python 3
a = [7, 2, 5]
b = sorted(a)
print(a, b)
print(a.sort(reverse=True))
print(a)
print(sorted(["aaa", "b", "cc"], key=len))
Результат
[7, 2, 5] [2, 5, 7]
None
[7, 5, 2]
['b', 'cc', 'aaa']

Частая ошибка: Не присваивай a = a.sort(). Для нескольких критериев key может возвращать кортеж, например lambda row: (row[1], row[0]).

Проверить пример в онлайн Python ↗
Присваивание и копия списка

Как записывается

b = a; b = a.copy()

Что делает

b = a связывает два имени с одним объектом. copy() или a[:] создают поверхностную копию списка, но не копируют вложенные объекты.

Когда применять

Сохранить исходный набор перед изменениями.

Python 3
a = [[1], [2]]
b = a.copy()
b.append([3])
b[0].append(9)
print(a)
print(b)
Результат
[[1, 9], [2]]
[[1, 9], [2], [3]]

Частая ошибка: Для независимых вложенных объектов может понадобиться copy.deepcopy(). Конструкция [[0]*3]*2 создаёт две ссылки на одну строку.

Проверить пример в онлайн Python ↗
07 / PYTHON

Множества и словари

Где пригодится на ЕГЭ № 17, 25, 26 — уникальные значения, частоты и группировка; № 27 — организация данных при выбранном алгоритме.

Убирать повторы, сравнивать наборы и считать частоты.

Команда / конструкцияКогда использовать
set(a), set()Уникальные хешируемые элементы; set() — пустое множество. Список или словарь нельзя добавить как элемент множества.
a | b, a & b, a - bОбъединение, пересечение и разность множеств.
x in a, x not in aПроверка наличия элемента в множестве или последовательности. Для словаря проверяются ключи, а не значения.
d[key], d.get(key, 0)Значение по ключу; значение с запасным вариантом.
d.items(), d.keys(), d.values()Динамические представления пар ключ–значение, ключей и значений. Изменение словаря отражается в представлениях.
Пример
d = {}
for x in [2, 3, 2, 2, 3]:
    d[x] = d.get(x, 0) + 1
print(d[2])
print(len(set([2, 3, 2])))
Результат
3
2

Запомни: {} создаёт пустой словарь, не множество. У множества нет индексов; порядок вывода его элементов не используй как условие решения.

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

set(): уникальные значения и операции

Как записывается

set(iterable); a | b; a & b; a - b

Что делает

Множество хранит уникальные хешируемые элементы. | — объединение, & — пересечение, - — разность. Индексов нет.

Когда применять

Убрать повторы или найти общие элементы.

Python 3
a, b = {1, 2, 3}, {2, 4}
print(sorted(a | b))
print(sorted(a & b))
print(sorted(a - b))
Результат
[1, 2, 3, 4]
[2]
[1, 3]

Частая ошибка: Пустое множество — set(), а {} — словарь. Порядок множества не является сортировкой; для упорядоченного вывода используй sorted().

Проверить пример в онлайн Python ↗
dict и get(): значения по ключам

Как записывается

d[key]; d.get(key, default)

Что делает

Словарь связывает хешируемые ключи со значениями. get возвращает запасное значение, если ключа нет, не добавляя этот ключ.

Когда применять

Подсчитать частоты или сохранить лучший результат для каждого остатка.

Python 3
counts = {}
for x in [2, 5, 2]:
    counts[x] = counts.get(x, 0) + 1
print(counts[2])
print(counts.get(9, 0))
print(9 in counts)
Результат
2
0
False

Частая ошибка: d[key] при отсутствующем ключе вызывает KeyError. Проверка x in d ищет ключ, а не значение.

Проверить пример в онлайн Python ↗
08 / PYTHON

Чтение файлов

Где пригодится на ЕГЭ № 17, 24, 26, 27 — чтение файлов с последовательностями, строками и наборами данных.

Обрабатывать числовые данные и длинные строки.

Команда / конструкцияКогда использовать
with open("data.txt") as f:Открыть текстовый файл на чтение и закрыть после блока. При необходимости укажи encoding="utf-8".
for line in f:Построчное чтение, удобно для больших файлов.
f.readline()Читает одну строку, обычно сохраняя \n в конце. На конце файла вернёт "", а пустая строка в файле обычно читается как "\n".
f.read().split()Все данные, разбитые по пробельным символам. Требует памяти под весь файл.
Пример
from io import StringIO

# Имитируем файл с числами
with StringIO("12\n7\n5\n") as f:
    a = [int(line) for line in f]
print(sum(a))
Результат
24

Запомни: Пример использует StringIO вместо реального файла. В задаче замени его на open("имя_файла.txt"). Уточняй формат: первая строка может содержать количество чисел. Чтение всего файла целиком может не подойти для большого объёма данных. Файл — одноразовый проход: после read() чтение продолжится с текущей позиции; для возврата к началу используй f.seek(0).

Ещё пример: важные нюансы
Проверь поведение
from io import StringIO

f = StringIO("\n")
print(repr(f.readline()))
print(repr(f.readline()))
Результат
'\n'
''

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

open() и with: работа с файлом

Отдельная инструкция: как прочитать файл задачи

  1. Подготовь текстовый файл. Например, создай data.txt, в котором каждое число записано на отдельной строке.
  2. На компьютере помести его в рабочую папку запуска программы или укажи полный путь. Относительный путь отсчитывается от текущей рабочей папки, которая не всегда совпадает с папкой файла .py.
  3. В нашем онлайн Python загрузи файл в поле «Файл UTF-8 для задачи» и используй его точное имя в open().
  4. Открой файл через with open(...), прочитай данные в блоке с отступом. После блока файл закроется автоматически.

Файл data.txt для следующего примера

12
7
5

Прочитать и сложить числа

Python 3
with open("data.txt", "r", encoding="utf-8") as f:
    total = 0
    for line in f:
        total += int(line)
print(total)
Результат
24

Этот пример требует подготовленного data.txt с содержимым выше. int() допускает пробелы и перевод строки по краям числовой записи. Пустую строку вместо числа нужно отдельно пропустить или обработать согласно формату файла.

Что означают аргументы open()

АргументЗначение
"data.txt"Путь к файлу; это строка, поэтому нужны кавычки.
"r"Чтение, режим по умолчанию. Файл должен существовать.
"w"Запись: создаёт файл или стирает прежнее содержимое.
"a"Добавление данных в конец; создаёт файл, если его нет.
encoding="utf-8"Кодировка текстового файла. Должна соответствовать тому, как файл сохранён.
as fИмя файлового объекта внутри блока with; f можно заменить другим именем.

Файл с количеством чисел в первой строке

Если первая строка — число записей, её нельзя прибавлять к данным. Для примера ниже файл numbers.txt содержит строки 3, 12, 7, 5.

Python 3
with open("numbers.txt", encoding="utf-8") as f:
    n = int(f.readline())
    a = [int(f.readline()) for _ in range(n)]
print(n, sum(a))
Результат
3 24

Создание учебного файла и повторное чтение

Python 3
with open("sample.txt", "w", encoding="utf-8") as f:
    f.write("4\n6\n")

with open("sample.txt", encoding="utf-8") as f:
    print(sum(int(line) for line in f))
Результат
10

Проверь при ошибке: FileNotFoundError — путь или имя файла; UnicodeDecodeError — кодировку; ValueError — формат строки. Не открывай входной файл в режиме w: его данные будут стёрты. Обычный текстовый open() не превращает таблицы .xlsx/.ods в строки данных.

read(), readline() и позиция чтения

Как записывается

f.read(); f.readline(); f.seek(0)

Что делает

read читает оставшееся содержимое; readline — одну строку, обычно с переводом строки. Оба продвигают позицию чтения. На конце файла возвращают пустую строку.

Когда применять

Прочитать длинную строку целиком либо сначала заголовок, затем данные.

Python 3
from io import StringIO
f = StringIO("A\n\nB")
print(repr(f.readline()))
print(repr(f.readline()))
print(repr(f.read()))
print(repr(f.read()))
Результат
'A\n'
'\n'
'B'
''

Частая ошибка: Пустая строка внутри файла читается как "\n", а конец файла — как "". После полного прохода для повторного чтения нужен seek(0) либо повторное открытие.

Проверить пример в онлайн Python ↗
09 / PYTHON

Функции и рекурсия

Где пригодится на ЕГЭ № 16 — рекуррентные выражения; № 19–21 — игры; № 23 — подсчёт программ исполнителя.

Описывать повторяющиеся вычисления и зависимости.

Команда / конструкцияКогда использовать
def f(x):Объявление функции с параметром.
return valueВозврат результата и завершение вызова функции.
from functools import lru_cacheИмпорт кеширования результатов функции.
@lru_cache(None)Кешировать результаты по аргументам без ограничения числа записей; это может расходовать много памяти.
Пример
from functools import lru_cache

@lru_cache(None)
def f(n):
    if n <= 1:
        return 1
    return n + f(n - 2)

print(f(7))
Результат
16

Запомни: Обязательно задай базовый случай. Кеширование не убирает ограничение глубины рекурсии: для длинных цепочек часто лучше цикл и таблица. Аргументы кешируемой функции должны быть хешируемыми. Без return функция возвращает None. Не меняй внешние данные, от которых зависит результат кешируемой функции, без очистки кеша.

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

def и return: создать функцию

Как записывается

def name(parameter):
    return expression

Что делает

def создаёт функцию. Параметр — имя в определении, аргумент — переданное значение. return возвращает результат и немедленно завершает текущий вызов.

Когда применять

Выделить проверку числа или повторяющееся вычисление.

Python 3
def square(x):
    return x * x

answer = square(7)
print(answer)
Результат
49

Частая ошибка: print внутри функции не заменяет return. Если return не выполнен либо записан без значения, результат вызова — None.

Проверить пример в онлайн Python ↗
Рекурсия: функция вызывает себя

Как записывается

def f(n):
    ... f(n - 1) ...

Что делает

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

Когда применять

Зависимости F(n), перебор путей и небольшие деревья вариантов.

Python 3
def f(n):
    if n == 1:
        return 1
    return n * f(n - 1)

print(f(5))
Результат
120

Частая ошибка: Глубина рекурсии ограничена. Большие линейные цепочки обычно лучше считать циклом; увеличение лимита не делает алгоритм эффективнее.

Проверить пример в онлайн Python ↗
@lru_cache(None): запомнить вычисления

Как записывается

from functools import lru_cache

@lru_cache(None)
def f(n):
    ...

Что делает

Декоратор кеширует результаты по аргументам. None отключает ограничение размера кеша. Повторный вызов с теми же аргументами может вернуть готовый результат.

Когда применять

Ускорить рекурсию, где одни и те же подзадачи вычисляются многократно.

Python 3
from functools import lru_cache

@lru_cache(None)
def f(n):
    if n < 2:
        return n
    return f(n - 1) + f(n - 2)

print(f(10))
print(f(10))
Результат
55
55

Частая ошибка: Аргументы должны быть хешируемыми. Кеш не снимает ограничение глубины рекурсии и расходует память. Используй его для функций без значимых побочных эффектов.

Проверить пример в онлайн Python ↗
10 / PYTHON

Системы счисления

Где пригодится на ЕГЭ № 5, 14 — перевод и изменение записи числа; № 13 — анализ двоичной записи IP-адресов.

Преобразовывать записи и анализировать цифры.

Команда / конструкцияКогда использовать
bin(n), oct(n), hex(n)Запись целого числа в основаниях 2, 8 и 16, с префиксом.
bin(n)[2:]Для неотрицательного n: двоичная запись без 0b.
int(s, base)Разобрать целое число из строки в основании 2–36 (также есть режим base=0 для префиксов 0b, 0o, 0x). Цифры должны подходить основанию.
n % base, n // baseДля целого n ≥ 0 и целого base ≥ 2: последняя цифра в основании base и удаление этой цифры. Для отрицательных чисел сначала обработай знак.
Пример
n = 45
s = bin(n)[2:]
print(s)
print(s.count("1"))
print(int("101101", 2))
Результат
101101
4
45

Запомни: Срез [2:] подходит для неотрицательных чисел; у отрицательных bin() начинается с −0b. Для основания больше 36 реализуй преобразование самостоятельно. Ноль в своей функции преобразования обработай отдельно.

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

bin() и int(..., base): преобразовать запись

Как записывается

bin(n); int(text, base)

Что делает

bin возвращает строку с префиксом 0b для неотрицательного числа. int(text, base) читает целое в основании 2–36; режим 0 распознаёт префиксы.

Когда применять

Дописывать разряды, считать единицы и переводить числа.

Python 3
s = bin(45)[2:]
print(s, s.count("1"))
print(int("101101", 2))
print(int("FF", 16))
Результат
101101 4
45
255

Частая ошибка: У отрицательных чисел префикс начинается с -0b, поэтому [2:] не удалит его правильно. Для анализа модуля используй abs(n).

Проверить пример в онлайн Python ↗
Свой алгоритм перевода в произвольную систему счисления

Идея: деление с остатком

  1. Последняя цифра в основании base равна x % base.
  2. Убираем эту цифру: x //= base.
  3. Повторяем, пока x не станет нулём.
  4. Остатки получаются от младшей цифры к старшей, поэтому добавляем их слева или разворачиваем список.

Ваш пример: перевод в троичную систему

Python 3
def f(x):
    if x == 0:
        return "0"
    s = ""
    while x != 0:
        s = str(x % 3) + s
        x //= 3
    return s

print(f(9**8 + 3**5 - 9).count("2"))
Результат
3

Здесь x должен быть неотрицательным целым. Проверка x == 0 нужна, чтобы число 0 не превращалось в пустую строку. Выражение count("2") считает двойки уже в полученной троичной записи.

Универсальная запись для оснований от 2 до 36

Python 3
def to_base(x, base):
    alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    if not 2 <= base <= len(alphabet):
        raise ValueError("Основание должно быть от 2 до 36")
    if x == 0:
        return "0"
    sign = "-" if x < 0 else ""
    x = abs(x)
    s = ""
    while x:
        s = alphabet[x % base] + s
        x //= base
    return sign + s

print(to_base(45, 2))
print(to_base(255, 16))
print(to_base(0, 7))
print(to_base(-45, 3))
Результат
101101
FF
0
-1200

Функция принимает целое x и целое основание base. Для разрядов от 10 используются буквы: A = 10, B = 11, …, Z = 35. Поэтому нельзя просто писать str(x % base) при base > 10: число 15 должно стать одной цифрой F, а не двумя символами 1 и 5.

Для любого целого основания от 2: список цифр

Python 3
def base_digits(x, base):
    if x < 0 or base < 2:
        raise ValueError("Нужны x >= 0 и base >= 2")
    if x == 0:
        return [0]
    digits = []
    while x:
        digits.append(x % base)
        x //= base
    return digits[::-1]

print(base_digits(2026, 100))
print(base_digits(45, 3))
Результат
[20, 26]
[1, 2, 0, 0]

Эта версия принимает целые x >= 0 и base >= 2. Она не ограничена алфавитом: каждая цифра хранится отдельным числом от 0 до base-1. Например, [20, 26] в основании 100 означает 20*100 + 26. Это список разрядов, а не неоднозначная склеенная строка.

Важно: отдельно обработай ноль, знак и допустимое основание. Цикл while x != 0 с отрицательным x без abs() может не завершиться из-за округления // вниз.

11 / PYTHON

Комбинаторный перебор

Где пригодится на ЕГЭ № 8 — комбинаторный подсчёт и слова; № 2 — перебор логических наборов; № 15 — проверка ограничений.

Строить слова и сочетания по заданным правилам.

Команда / конструкцияКогда использовать
from itertools import product, permutations, combinationsПодключение трёх функций из стандартного модуля itertools.
product("AB", repeat=3)Все слова длины 3 с повторениями.
permutations(a, r)Все порядки r выбранных элементов. Одна позиция не берётся дважды; AB и BA — разные варианты.
combinations(a, r)Выбор r позиций без учёта перестановок. Из A, B, C при r=2 получатся AB, AC, BC.
Пример
from itertools import product

count = 0
for word in product("AB", repeat=3):
    if word.count("A") == 2:
        count += 1
print(count)
Результат
3

Запомни: product() возвращает кортежи. Для строки используй "".join(word). Число вариантов растёт экспоненциально: не превращай большой перебор в list(). Повторяющиеся значения во входном наборе могут давать одинаковые результаты в permutations().

Ещё пример: важные нюансы
Проверь поведение
from itertools import combinations

print(list(combinations("AAB", 2)))
Результат
[('A', 'A'), ('A', 'B'), ('A', 'B')]

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

product(): перебор с повторениями

Как записывается

product(alphabet, repeat=length)

Что делает

Возвращает итератор кортежей — декартово произведение. При repeat=k перебираются слова длины k; исходные символы могут повторяться.

При алфавите "AB" и длине 2 возможны AA, AB, BA, BB: порядок важен и символы можно использовать многократно. Для m различных символов и длины k вариантов m**k. Порядок выдачи определяется порядком символов во входе: если алфавит отсортирован, слова идут в соответствующем лексикографическом порядке.

Когда применять

Перебрать слова или логические наборы.

Python 3
from itertools import product
for word in product("AB", repeat=2):
    print("".join(word))
Результат
AA
AB
BA
BB

Частая ошибка: Результат — кортеж, не строка. При алфавите размера m число вариантов равно m**k: оцени объём перебора заранее.

Проверить пример в онлайн Python ↗
permutations(): порядок важен, позиции не повторяются

permutations выбирает r различных позиций исходной последовательности и перебирает все порядки выбранных элементов. Если r не указано, берутся все элементы. Для n различных элементов количество результатов — n! / (n-r)!.

Python 3
from itertools import permutations
for word in permutations("ABC", 2):
    print("".join(word))
Результат
AB
AC
BA
BC
CA
CB

AB и BA считаются разными. Буква с одной и той же позиции не используется дважды. При одинаковых буквах на разных позициях одинаковые результаты всё равно возможны.

combinations(): порядок выбора не важен

combinations выбирает r различных позиций без перебора перестановок одного и того же выбора. Внутри результата элементы идут в порядке их позиций во входных данных. Для n различных элементов число вариантов — n! / (r!*(n-r)!).

Python 3
from itertools import combinations
for pair in combinations("ABC", 2):
    print("".join(pair))
Результат
AB
AC
BC

Из пары букв A и B получится AB, а отдельного варианта BA не будет. Если исходный набор не отсортирован, combinations не сортирует значения самостоятельно.

combinations_with_replacement(): выбор с повторениями

combinations_with_replacement выбирает r элементов с возможностью повторного использования позиции. Порядок выбора не различается. Подходит, например, для выбора двух вкусов, когда одинаковый вкус разрешён.

Python 3
from itertools import combinations_with_replacement
for pair in combinations_with_replacement("AB", 2):
    print("".join(pair))
Результат
AA
AB
BB

В отличие от product("AB", repeat=2), отдельного BA здесь нет. Для n различных элементов и длины r число вариантов равно C(n+r-1, r).

Какую функцию выбрать

ФункцияПорядок важен?Повтор позиции?Для A, B и длины 2
productДаДаAA, AB, BA, BB
permutationsДаНетAB, BA
combinationsНетНетAB
combinations_with_replacementНетДаAA, AB, BB

Все эти функции возвращают итераторы кортежей. Для строки используй "".join(...). Не превращай большой перебор в список без необходимости; при повторяющихся входных значениях могут появляться одинаковые результаты.

12 / PYTHON

Полезные функции

Где пригодится на ЕГЭ № 15 — all/any для логических проверок; № 17 — суммы и экстремумы; № 25 — делители, НОД и целый квадратный корень.

Проверять делители и условия для последовательностей.

Команда / конструкцияКогда использовать
all(iterable), any(iterable)Все условия истинны / хотя бы одно условие истинно.
zip(a, b)Пары соответствующих элементов; по умолчанию до конца короткой последовательности.
from math import isqrt, gcd, ceilisqrt(n) = ⌊√n⌋ для целого n ≥ 0; gcd(a, b) — неотрицательный НОД целых; ceil(x) — округление вверх.
range(1, isqrt(n) + 1)Кандидаты в делители до корня включительно.
Пример
from math import isqrt

n = 36
divisors = set()
for d in range(1, isqrt(n) + 1):
    if n % d == 0:
        divisors.add(d)
        divisors.add(n // d)
print(sorted(divisors))
Результат
[1, 2, 3, 4, 6, 9, 12, 18, 36]

Запомни: При поиске делителей учитывай парный делитель n // d. Для квадратов два делителя совпадают — множество уберёт дубль. all([]) возвращает True, any([]) — False. Пример с делителями рассчитан на целое n > 0. Для больших целых не заменяй isqrt(n) на int(n ** 0.5): округление float может дать ошибку.

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

all() и any(): проверить много условий

Как записывается

all(iterable); any(iterable)

Что делает

all истинен, если все элементы истинны; any — если хотя бы один истинен. Обе функции прекращают чтение, когда результат уже определён.

Когда применять

Проверить отсутствие делителей или наличие подходящей пары.

Python 3
print(all(x > 0 for x in [2, 7, 1]))
print(any(x % 2 == 0 for x in [3, 5, 8]))
print(all([]), any([]))
Результат
True
True
True False

Частая ошибка: Пустой перебор делает all истинным, а any ложным. Убедись, что диапазон проверки не оказался пустым случайно.

Проверить пример в онлайн Python ↗
sum(), min(), max(): сводные значения

Как записывается

sum(a); min(a); max(a)

Что делает

sum накапливает сумму со стартом 0 по умолчанию. min и max находят крайние элементы; можно задавать key и default для формы с iterable.

Когда применять

Найти сумму, лучший результат или ближайшую по критерию запись.

Python 3
a = [4, 9, 2]
print(sum(a), min(a), max(a))
print(sum([]))
print(max([], default=0))
Результат
15 2 9
0
0

Частая ошибка: Без default min([]) и max([]) вызовут ValueError. Стартовое значение 0 не подходит для максимума отрицательных чисел, если ты считаешь максимум вручную.

Проверить пример в онлайн Python ↗
isqrt(), gcd(), ceil(): математические функции

Как записывается

from math import isqrt, gcd, ceil

Что делает

isqrt(n) даёт целую часть корня неотрицательного целого. gcd(a,b) — неотрицательный НОД. ceil(x) — наименьшее целое, не меньше x.

Когда применять

Проверять делители до точного корня и округлять количество групп вверх.

Python 3
from math import isqrt, gcd, ceil
print(isqrt(50))
print(gcd(84, 30))
print(ceil(7 / 3))
Результат
7
6
3

Частая ошибка: Для больших целых isqrt точнее, чем int(n**0.5). ceil(a/b) сначала создаёт float; для целых a >= 0, b > 0 используй (a+b-1)//b.

Проверить пример в онлайн Python ↗
13 / PYTHON

Побитовые операции

Где пригодится на ЕГЭ № 13 — двоичные адреса и маски; № 15 — условия с побитовым И, если они заданы в задаче.

Работать с битовыми масками и двоичными числами.

Команда / конструкцияКогда использовать
a & bПобитовое И: бит равен 1, если он равен 1 в обоих числах.
a | b, a ^ bПобитовое ИЛИ и исключающее ИЛИ (XOR). ^ не возводит в степень.
n << k, n >> kСдвиги на k ≥ 0 битов. Для целого n: n << k = n * 2 ** k, n >> k = n // 2 ** k.
n & (1 << k)Проверка бита с номером k; младший бит имеет номер 0.
Пример
a, b = 10, 6
print(a & b)
print(a | b)
print(a ^ b)
print(a << 1)
Результат
2
14
12
20

Запомни: При сравнении с маской используй явные скобки: (x & mask) == 0. ~n равно −n − 1, а не инверсии фиксированного числа разрядов.

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

&, |, ^, <<, >>: побитовые операции

Как записывается

a & b; a | b; a ^ b; n << k; n >> k

Что делает

Операции применяются к двоичным разрядам целых чисел. ^ — XOR. Сдвиг влево умножает на 2**k, сдвиг вправо соответствует // 2**k при k >= 0.

Когда применять

Маски битов и задачи с условиями на двоичную запись.

Python 3
a, b = 10, 6
print(a & b, a | b, a ^ b)
print(a << 1, a >> 1)
print((a & (1 << 1)) != 0)
Результат
2 14 12
20 5
True

Частая ошибка: Не путай & с and. При сравнении маски ставь скобки: (x & mask) == 0. Для целых ~x равно -x-1, а не инверсии фиксированной ширины.

Проверить пример в онлайн Python ↗
14 / PYTHON

Маски чисел

Где пригодится на ЕГЭ № 25 — отбор чисел по маске записи с дополнительными арифметическими условиями.

Отбирать десятичные записи по шаблону.

Команда / конструкцияКогда использовать
from fnmatch import fnmatchcaseИмпорт проверки строки по шаблону с учётом регистра.
fnmatchcase(s, "12?*5")Сопоставление всей строки с шаблоном.
"?"Ровно один произвольный символ; для строки из цифр — одна цифра.
"*"Любая последовательность символов, в том числе пустая.
Пример
from fnmatch import fnmatchcase

for n in [125, 1205, 12345, 129]:
    if fnmatchcase(str(n), "12?*5"):
        print(n)
Результат
1205
12345

Запомни: Это не регулярные выражения. Маска проверяет символы, а не арифметические свойства. Применяй её к str(n); делимость проверяй отдельно. Если ищешь числа, кратные d > 0, перебирай с шагом d, а не все числа подряд.

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

fnmatchcase(): проверить маску

Как записывается

fnmatchcase(text, pattern)

Что делает

Сопоставляет всю строку с шаблоном: ? — ровно один символ, * — любая последовательность, включая пустую. Регистр учитывается.

Когда применять

Отбирать десятичные записи чисел по маске.

Python 3
from fnmatch import fnmatchcase
for n in [125, 1205, 12345]:
    print(n, fnmatchcase(str(n), "12?*5"))
Результат
125 False
1205 True
12345 True

Частая ошибка: Шаблоны fnmatch не равны регулярным выражениям. На строке из цифр ? соответствует цифре, но вообще это любой символ.

Проверить пример в онлайн Python ↗
15 / PYTHON

Пары и префиксные суммы

Где пригодится на ЕГЭ № 17 — соседние пары и последовательности; префиксы полезны в тренировочных задачах с повторными запросами сумм отрезков.

Основные приёмы для числовых последовательностей.

Команда / конструкцияКогда использовать
zip(a, a[1:])Соседние пары списка; создаётся копия среза a[1:].
range(len(a) - 1)Индексы начал соседних пар: a[i], a[i + 1].
prefix = [0]Начало таблицы префиксных сумм: prefix[i] — сумма первых i элементов.
prefix[r] - prefix[l]Сумма элементов a[l:r], граница r не включается.
Пример
a = [3, -2, 5, 4]
prefix = [0]
for x in a:
    prefix.append(prefix[-1] + x)
print(prefix[3] - prefix[1])
print(sum(x < y for x, y in zip(a, a[1:])))
Результат
3
1

Запомни: Соседние пары и любые пары — разные задачи. Для любых пар i < j наивный двойной цикл имеет квадратичную сложность. Префиксы ускоряют суммы отрезков, но не решают автоматически поиск лучшего отрезка.

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

Префиксные суммы: сумма отрезка

Как записывается

prefix[r] - prefix[l]

Что делает

prefix[i] хранит сумму первых i элементов. Разность двух префиксов даёт сумму a[l:r], где правая граница не включается.

Когда применять

Много раз быстро считать суммы разных отрезков: подготовка O(n), один запрос O(1).

Python 3
a = [3, -2, 5, 4]
prefix = [0]
for x in a:
    prefix.append(prefix[-1] + x)
print(prefix[3] - prefix[1])
Результат
3

Частая ошибка: prefix начинается с нуля и имеет длину len(a)+1. Для включительного отрезка с индексами l..r нужна формула prefix[r+1]-prefix[l].

Проверить пример в онлайн Python ↗
16 / PYTHON

Частоты и накопление

Где пригодится на ЕГЭ № 17, 24, 26 — подсчёт повторов чисел и символов, поиск наиболее частых значений.

Считать повторения и поддерживать счётчики.

Команда / конструкцияКогда использовать
from collections import CounterИмпорт счётчика частот.
Counter(a)Словарь-подобный объект: элемент → число вхождений.
counts[x]Число вхождений x; для отсутствующего ключа возвращает 0.
counts.most_common(k)До k пар (элемент, частота) в порядке убывания частоты.
Пример
from collections import Counter

counts = Counter("ABACABA")
print(counts["A"], counts["C"])
print(counts["Z"])
print(counts.most_common(1))
Результат
4 1
0
[('A', 4)]

Запомни: Counter хранит частоты, а len(counts) — число ключей, не сумму частот. После изменения счётчика в нём могут остаться ключи с нулевой или отрицательной частотой.

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

Counter(): частоты элементов

Как записывается

from collections import Counter
counts = Counter(data)

Что делает

Словарь-подобный объект счётчиков. Для отсутствующего ключа возвращает 0; most_common(k) выдаёт до k самых частых значений с частотами.

Когда применять

Подсчитать символы или повторы чисел.

Python 3
from collections import Counter
c = Counter("ABACABA")
print(c["A"], c["Z"])
print(c.most_common(1))
print(sum(c.values()))
Результат
4 0
[('A', 4)]
7

Частая ошибка: len(c) — количество ключей, не сумма частот. В счётчике после изменений могут остаться нулевые и отрицательные частоты.

Проверить пример в онлайн Python ↗
17 / PYTHON

Округление и точность

Где пригодится на ЕГЭ № 7, 11 — округление объёма вверх; № 25 — точные целочисленные расчёты; № 27 — вычисления с координатами и данными.

Не терять точность при расчётах с целыми числами.

Команда / конструкцияКогда использовать
round(x)Округление к ближайшему целому; при точной середине выбирается чётное.
round(x, n)Округление до n знаков после точки с учётом особенностей представления float.
int(x)Для вещественного x отбрасывает дробную часть в направлении нуля, а не вниз.
(a + b - 1) // bДля целых a ≥ 0 и b > 0: округление a / b вверх без float.
Пример
print(round(2.5), round(3.5))
print(int(-3.9), -7 // 2)
print((17 + 5 - 1) // 5)
print(round(2.675, 2))
Результат
2 4
-3 -4
4
2.67

Запомни: Десятичные дроби часто хранятся в float приближённо. Для точных расчётов с целыми предпочитай целочисленные формулы. round() не всегда совпадает со школьным правилом «5 округляется вверх».

Подробно: отдельные команды и операции

Открой нужный разбор. Каждый пример можно выполнить целиком.

round(): округление и float

Как записывается

round(x); round(x, ndigits)

Что делает

Округляет к ближайшему значению; при точной середине выбирается чётное. Десятичные дроби типа float часто представлены приближённо.

Когда применять

Округлить вывод, когда это разрешено условием; для точных целочисленных задач лучше не вводить float без необходимости.

Python 3
print(round(2.5), round(3.5))
print(round(2.675, 2))
print((17 + 5 - 1) // 5)
Результат
2 4
2.67
4

Частая ошибка: round не совпадает со школьным правилом «5 всегда вверх». Третий пример — точное округление 17/5 вверх без float.

Проверить пример в онлайн Python ↗

Дополнительно: термины Python ↗ · функции и управление потоком ↗ · декораторы functools ↗

Примеры для Python 3. Справочник составлен для подготовки и не является официальным перечнем команд ЕГЭ.

Документация: основы Python ↗ · типы и операции ↗ · встроенные функции ↗ · маски fnmatch ↗ · itertools ↗ · файлы и ввод-вывод ↗

Закрепить в тренажёре ↗