К другим статьям

ЕГЭ по информатике без паники: строки в задачах (Задания 12, 13, 24)

10

Поделиться
Фон

Делимся разбором самых сложных заданий в Телеграм канале

Перейти в ТГ

Для чего нужно разбираться в этой теме

Для чего нужно разбираться в этой темеМне 27, я готовлю школьников к ЕГЭ по информатике....

** изображение создано или обработано с помощью ИИ.

Мне 27, я готовлю школьников к ЕГЭ по информатике. Сам когда-то путался в индексах и срезах. Особенно в задачах по обработке строк, где код выглядит безобидно, а потом съедает баллы.

В заданиях 12, 13 и 24 ЕГЭ по информатике строки пугают не синтаксисом. Они пугают мелочами. Один лишний символ. Неверная граница среза. Пробел в конце. Программа считает не то. При этом задача кажется простой. Мозг говорит: «Да ладно, тут же буквы». Мозг — оптимист, но на ЕГЭ это не помогает.

Строка — последовательность символов. Символом может быть буква, цифра, пробел, знак препинания. Даже невидимый перевод строки важен. В Python строку записывают в кавычках: ‘abc’ или «ЕГЭ».

Смотрю на строку как на ряд ячеек. У каждой есть номер. В Python нумерация начинается с нуля. В строке ‘кот’:

  1. буква ‘к’ — индекс 0;
  1. буква ‘о’ — индекс 1;
  1. буква ‘т’ — индекс 2.

А почему не с единицы? Потому что так устроено. Примите это как факт. Можно ворчать, но на экзамене счёт с нуля работает именно так.

Проверяйте себя:

  1. не путаете ли вы длину строки с последним индексом (длина 3, а последний индекс 2);
  1. не забываете ли про пробелы и знаки — они тоже символы;
  1. не используете ли срез [1:3] когда нужно [1:2].

В черновике я записываю явно: «строка длины N, индексы от 0 до N‑1». Это занимает пять секунд и убирает путаницу. Прозрачность начинается с мелочей.

Индексы, срезы и вечная ловушка на единицу

Для чего нужно разбираться в этой темеМне 27, я готовлю школьников к ЕГЭ по информатике....

** изображение создано или обработано с помощью ИИ.

Договоримся сразу: срез в Python отрезает кусок, но правый край не забирает. Представьте, что вы режёте колбасу. Лезвие поставили на цифру 4, но отрезали только то, что до неё дошло. Сама четвёрка осталась нетронутой.

Пример для запоминания: s = ‘abcdef’. Команда s[1:4] выдаст ‘bcd’. Почему не ‘bcde’? Потому что e как раз на позиции 4, а туда нож не дошёл.

Отрицательные индексы работают как отсчёт с хвоста: s[-1] — последний символ, s[-2] — предпоследний. Удобно, но не увлекайтесь. Код должен быть понятен вам же через час.

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

  1. Где начинаю?
  1. Где заканчиваю? (и помните: конец не входит, ставьте на один больше).

И не забывайте: пробел, точка, запятая — тоже полноправные жители строки. У каждого есть своя клетка с номером.

Поиск символов без магии и шаманского бубна

Для чего нужно разбираться в этой темеМне 27, я готовлю школьников к ЕГЭ по информатике....

** изображение создано или обработано с помощью ИИ.

Многие задания со строками — это поиск. Найти букву, сочетание, количество вхождений. Иногда заменить фрагменты. Мой совет: не хватайтесь за сложный код сразу. Сначала опишите действие словами.

Подсчёт символов. Допустим, нужно посчитать буквы ‘А’ в строке. Проще всего: перебрать символы. Если символ равен ‘А’, увеличиваю счётчик. Никаких излишеств, зато надёжно.

В Python есть метод count. Он считает непересекающиеся вхождения подстроки. Для одиночного символа это удобно. Но с пересечениями — внимание. Пример: строка ‘aaaa’, подстрока ‘aa’ встречается с пересечением три раза (позиции 0–1, 1–2, 2–3).

Метод count вернёт 2. Значит, встроенные методы опасны? Нет. Опасна вера без проверки. Метод — инструмент, не амулет. Если в условии сказано «все позиции, включая пересекающиеся», я прохожу строку циклом. Так я контролирую каждый шаг.

Поиск индекса. Метод find возвращает индекс первого вхождения фрагмента. Если фрагмента нет — результат -1. Это удобно для проверки наличия. Но не путайте -1 с обращением к последнему символу (s[-1]). Контекст решает всё. -1 как результат поиска — это «не найдено». -1 как индекс — это последний символ. Разные вещи.

Замена. Метод replace меняет одни фрагменты на другие. В алгоритмических задачах пригождается. Но порядок замен важен. Если сначала заменить ‘ab’, а потом ‘a’, результат может отличаться от обратного порядка.

Беру короткий пример. Прогоняю замену руками, на бумаге или в уме. Потом пишу код. Так я замечаю странности до запуска программы, а не во время отладки. Это безопаснее и прозрачнее для самопроверки.

Как читать условие и не додумывать лишнего

Для чего нужно разбираться в этой темеМне 27, я готовлю школьников к ЕГЭ по информатике....

** изображение создано или обработано с помощью ИИ.

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

Пример: написано «содержит ровно три буквы». Читаешь «не меньше трёх». Потом удивляешься результату. Я сам так ошибался. Было больно, но после этого стал внимательнее.

Что я выделяю в условии обязательно:

  1. Что считается символом (буквы, цифры, пробелы, знаки).
  1. Учитывается ли регистр (строчные и прописные одинаковы или нет).
  1. Есть ли пробелы и считаются ли они.
  1. Нужно искать подряд идущие символы или любые позиции.

Эти детали определяют код. Без них решение превращается в угадывание.

Если строка считывается из файла, метод readline() может оставить символ перевода строки в конце. strip() убирает пробельные символы по краям. Но он уберёт и значимые пробелы, если они нужны. Поэтому я применяю strip() только когда точно знаю, что пробелы по краям не важны.

Мой простой порядок действий: открыл файл, прочитал данные, вывел на экран первый элемент. Не пишу сразу большой алгоритм. Сначала убеждаюсь, что данные выглядят так, как ожидаю. Это экономит время и нервы.

В открытых демоверсиях ФИПИ встречаются разные форматы одних и тех же по смыслу задач. Я не советую заучивать шаблоны наизусть. Шаблон не спасёт, если вы неправильно поняли условие. Лучше тренировать внимательное чтение.

Прочитав условие, я всегда спрашиваю себя: что именно должна вернуть программа? Число, строку, позицию, максимум, минимум? Записываю ответ рядом с условием. Звучит скучно. Но это работает.

Можно взять курс подготовки к ЕГЭ по информатике, например, в онлайн-школе «ЕГЭленд». Хороший курс полезен не обещаниями быстрых результатов, а регулярной практикой и обратной связью. Особенно когда преподаватель замечает вашу типичную ошибку и показывает её на конкретном примере.

Типовые приемы, которые реально экономят время

Для чего нужно разбираться в этой темеМне 27, я готовлю школьников к ЕГЭ по информатике....

** изображение создано или обработано с помощью ИИ.

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

Первый — счётчик. Нужно узнать количество символов или фрагментов. Завожу переменную cnt = 0. При выполнении условия прибавляю единицу. Без романтики. Часто это даёт полный балл.

Второй — флаг. Флаг хранит ответ «да» или «нет». Например, найден ли запрещённый символ. В Python использую True и False. Флаг делает код понятным. Понятный код легче проверить и исправить.

Третий — максимум для непрерывных цепочек. Ищу самую длинную последовательность подряд идущих символов. Завожу текущую длину и лучший результат. Цепочка продолжается — увеличиваю текущую. Обрывается — сравниваю с лучшим и сбрасываю.

  1. Пример: самая длинная серия букв ‘A’. Прохожу строку слева направо. Встретил ‘A’ — увеличил длину. Встретил другой символ — сбросил.

Четвёртый — окно фиксированной длины. Нужно проверить все тройки или пятёрки символов? Беру срез s[i:i+k]. Индекс i меняю в цикле. Правая граница снова не входит — напоминаю себе об этом каждый раз.

Пятый — перебор пар соседей. Цикл идёт до len(s)-1. Сравниваю s[i] и s[i+1]. Так ищу замену символа, повтор, границу блока. Ошибка здесь одна: выйти за конец строки. Проверяю диапазон внимательно.

Как не выйти за границы (запоминаю смысл, а не формулы):

  1. Для одного символа: цикл по всей строке.
  1. Для пары соседей: диапазон до len(s)-1.
  1. Для окна длины k: диапазон до len(s)-k.

Последнее окно должно целиком помещаться в строку. Если это условие выполнено, индексы не уходят в космос. Проверяю на коротком примере перед написанием основного кода.

Мини-тренировка перед вариантом

Для чего нужно разбираться в этой темеМне 27, я готовлю школьников к ЕГЭ по информатике....

** изображение создано или обработано с помощью ИИ.

Перед экзаменом не нужно решать сто задач подряд. Лучше взять десять и разобрать каждую честно. Ошибка должна получить имя. «Перепутал правую границу среза». «Не учёл пересечение при подсчёте». «Удалил значимый пробел через strip». Только тогда мозг понимает, что именно чинить.

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

Короткая разминка (меньше получаса). Пожалуйста, не подглядывайте в ответ сразу. Сначала составьте план на бумаге. Потом напишите код. После этого проверьте на маленькой тестовой строке.

Задачи для разминки:

  1. Дана строка s. Посчитайте количество букв ‘A’.
  1. Найдите индекс первого вхождения подстроки ‘101’.
  1. Посчитайте все вхождения ‘aa’ с пересечениями.
  1. Найдите длину самой длинной серии одинаковых символов.
  1. Проверьте все тройки подряд идущих символов: есть ли в каждой хотя бы две гласные.

После каждой задачи спросите себя: где была граница? Это главный вопрос всей темы. Если вы контролируете границы (начала, концы, правые края срезов, выход за диапазон), строки перестают выглядеть как минное поле.

Не переписывайте решение за минуту до конца экзамена. Лучше найдите и исправьте одну конкретную ошибку. Панический рефакторинг — когда вы меняете всё подряд без ясного плана — редко приносит счастье. Проверено.

Свежие варианты и демоверсии для тренировки берите на официальном сайте ФИПИ: https://fipi.ru (раздел «Информатика», открытый банк заданий).

Строки в ЕГЭ по информатике не требуют гениев в плащах или хакеров из кино. Они требуют аккуратных людей. Тех, кто читает условие, проверяет индексы на черновике и не спорит с тем, как Python работает со срезами. А это навык. И он вполне тренируется.

Фон

Хочешь начать готовиться, но остались вопросы?

Заполни форму, и мы подробно объясним, как устроена подготовка к ЕГЭ и ОГЭ в ЕГЭLAND

Саша Филатов

    Оставь заявку и мы свяжемся с тобой в течение 15 минут


    не повтори ошибки
    выпускников 2026

    Разберем, где ребята теряли баллы, как сдать ЕГЭ на 270+ и поступить на бюджет в 2027 году

    + Возможность выиграть технику Apple

    ЗАНЯТЬ МЕСТО
    Скидка на 8 марта