Базовый синтаксис
Время: 5-10 мин
str
slices
count
replace
find
join
Строки, срезы и строковые методы
Тема: Срезы [start:stop:step], count(), find(), replace(), split(), join()
Работа со строками — ядро заданий №12 (Исполнитель Редактор), №24 (Анализ символьных строк) и №8 ЕГЭ. Знание срезов и встроенных методов заменяет сложные циклы на одну строку кода.
1. Срезы (Slices): s[start:stop:step]
Срезы позволяют извлекать любую часть строки без изменения исходной строки (строки в Python неизменяемы — immutable):
s[2:5]— символы с индексами 2, 3, 4 (символ с индексомstopне включается!).s[:3]— первые 3 символа строки (префикс).s[-3:]— последние 3 символа строки (суффикс).s[::2]— каждый второй символ (с чётными индексами).s[::-1]— разворот строки задом наперёд (палиндром:s == s[::-1]).
2. Главные строковые методы
| Метод | Описание | Пример |
|---|---|---|
s.count(sub) |
Количество непересекающихся вхождений | "банан".count("ан") == 2 |
s.replace(old, new, 1) |
Замена ровно ОДНОГО первого вхождения | Для Задания 12 ЕГЭ! |
s.find(sub) |
Индекс первого вхождения (или -1) | "тест".find("е") == 1 |
delim.join(iterable) |
Склеивание списка строк в одну | "".join(['A','B','C']) == 'ABC' |
Разновидности и прототипы задания на экзамене
1. Срезы строк (Slices): s[start:stop:step]
Извлечение подстрок, разворот строки
s[::-1], шаги и отрицательные индексы.2. Поиск и подсчет: count(), find(), startswith(), endswith()
Быстрый подсчет подстрок и определение начальных/конечных символов.
3. Замена и модификация: replace() с лимитом
Критически важно для Задания №12:
s = s.replace('старое', 'новое', 1).4. Проверка состава: isdigit(), isalpha(), isupper(), islower()
Фильтрация цифр и букв.
Боевой шаблон решения на Python
Запустить код в онлайн-песочницеБоевой шаблон решения на Python
# === Шпаргалка: Строки и срезы на практике ===
s = "ИНФОРМАТИКА"
# 1. Примеры срезов:
print("Первые 3 буквы:", s[:3]) # ИНФ
print("Последние 4 буквы:", s[-4:]) # ТИКА
print("Разворот строки:", s[::-1]) # АКИТАМРОФНИ
print("Срез через одну:", s[::2]) # ИФРАТК
# 2. Замена с лимитом (Задание 12 ЕГЭ):
code_str = "1" * 50
while "111" in code_str:
# ОБЯЗАТЕЛЬНО передаем 1 третьим аргументом:
code_str = code_str.replace("111", "2", 1)
print("Результат работы редактора:", code_str)
# 3. Метод сплитов для Задания 24 ЕГЭ (поиск максимальной длины):
# Дана строка, найти макс. длину цепочки символов без буквы 'A'
test_line = "BCAABCCCDDAAB"
# Заменяем все 'A' на пробелы и разбиваем на куски:
chunks = test_line.replace('A', ' ').split()
max_len = max(len(c) for c in chunks)
print("Макс. длина без буквы A:", max_len)
Типичные ошибки
✕ Не так
# ❌ Ошибка в Задании 12: Забыть лимит в replace()
s = s.replace('11', '2') # Заменит ВСЕ вхождения сразу, нарушив алгоритм!
✓ Так
# ✅ Правильно: Всегда передавать единицу третьим аргументом:
s = s.replace('11', '2', 1)
✕ Не так
# ❌ Ошибка: Попытка изменить символ строки по индексу
s = 'hello'
s[0] = 'H' # TypeError: 'str' object does not support item assignment
✓ Так
# ✅ Правильно: Создать новую строку через срез:
s = 'H' + s[1:]
ГРОБ
ЛОВУШКА: Пересекающиеся подстроки в .count()
'XXXX'.count('XX') вернёт 2, а не 3, потому что count() не учитывает пересекающиеся вхождения.
Как обойти
Для поиска пересекающихся вхождений используйте цикл со сдвигом:
sum(1 for i in range(len(s)-1) if s[i:i+2] == 'XX') или регулярные выражения с Lookahead (?=...).Лайфхаки на экзамене
- Проверка на палиндром в 1 строку:
if s == s[::-1]: ... - Для подсчета гласных замените их на маркер
*:sum(s.count(v) for v in 'AEIOU'). - Метод
.isdigit()моментально проверяет, состоит ли строка целиком из цифр.