Как работать со строкой: индексы, upper, replace, find и join

Pythonобновлено 07.10.20269 мин чтенияесть тренажёр

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

Загружаем…

Что такое строка в Python

Строка — это последовательность символов, записанная в одинарных или двойных кавычках: 'кот' и "кот" — одна и та же строка. Тип строки называется str, и всё, что возвращает input(), — тоже строка.

hero = "Черепашка"
greeting = 'Привет'
empty = ""
print(greeting + ", " + hero + "!")
print(type(hero))
print("ха" * 3)
Привет, Черепашка!
<class 'str'>
хахаха

Строки в Python можно складывать — это называется конкатенация — и умножать на целое число, тогда текст повторится. А вот сложить строку с числом не выйдет: "Очки: " + 5 вызовет ошибку TypeError. Число сначала превращают в строку функцией str(5), а строку из цифр в число — функцией int("5"). Пустая строка "" тоже строка, просто в ней 0 символов.

Если внутри текста нужны кавычки, берите другой вид снаружи: 'Он сказал: "Привет"'. Для переноса строки внутри текста служит символ \n, для табуляции — \t. Длинный текст на несколько строк записывают в тройных кавычках. Все эти правила описаны в официальной документации Python в разделе о строках[1].

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

Каждый символ строки в Python имеет номер-индекс, и счёт начинается с 0; отрицательные индексы идут с конца, -1 — последний символ. Срез s[a:b] выбирает символы с индекса a до b, не включая b.

word = "программа"
print(word[0])
print(word[-1])
print(word[0:3])
print(word[3:])
print(word[::-1])
Символпрограмма
Индекс012345678
С конца-9-8-7-6-5-4-3-2-1

Запись word[0:3] даёт «про» — символы 0, 1 и 2, а word[3:] — всё начиная с индекса 3, то есть «грамма». Срез [::-1] переворачивает строку целиком, и это самый короткий способ проверить слово на палиндром. Обращение к индексу за пределами строки, например word[9], вызовет IndexError, а срез за пределами просто вернёт меньше символов. По тем же правилам работают индексы и срезы у списков, о них — в уроке про списки в Python.

Длина строки и перебор символов

Функция len() возвращает число символов в строке Python, считая пробелы и знаки препинания. Цикл for перебирает строку посимвольно: на каждом шаге переменная получает следующий символ.

city = "Санкт-Петербург"
print(len(city))
for ch in "мяу":
    print(ch * 2)
spaces = 0
for ch in "раз два три":
    if ch == " ":
        spaces += 1
print("Пробелов:", spaces)

В слове «Санкт-Петербург» 15 символов: дефис тоже считается. Перебор символов нужен для подсчётов — гласных, цифр, пробелов — и для проверки ввода. Если важен номер символа, перебирают индексы: for i in range(len(city)). Последний индекс всегда равен len(city) - 1. Устройство цикла подробно разобрано в уроке про цикл for.

Неизменяемость строк в Python

Строки в Python неизменяемые: заменить один символ по индексу не получится, запись s[0] = "Х" вызовет TypeError. Любой метод, который «меняет» строку, на самом деле возвращает новую, а старая остаётся прежней.

name = "мир"
name[0] = "п"
name = "мир"
name = "п" + name[1:]
print(name)
loud = name.upper()
print(name, loud)

Чтобы «исправить» строку, собирают новую из кусочков и кладут её в ту же переменную: name = "п" + name[1:]. С методами то же самое: name.upper() ничего не меняет в name, пока результат не присвоен. Это самая частая ловушка: ученик пишет text.replace("a", "b") отдельной строкой и удивляется, что текст остался прежним. Почему так устроено, объясняет документация Python: неизменяемые объекты можно безопасно использовать в нескольких местах программы сразу.

Методы строк: upper, lower, replace, count, find

Методы строки вызываются через точку после неё и возвращают результат, не трогая исходный текст. Ниже — 7 методов, которых хватает для большинства школьных задач.

МетодЧто делаетПримерРезультат
upper()Все буквы заглавные"кот".upper()"КОТ"
lower()Все буквы строчные"ДОМ".lower()"дом"
replace(a, b)Заменяет a на b везде"мама".replace("м", "п")"папа"
count(x)Считает вхождения x"банан".count("а")2
find(x)Индекс первого x или -1"кот".find("т")2
strip()Убирает пробелы по краям" да ".strip()"да"
isdigit()True, если только цифры"2024".isdigit()True

Методы можно соединять в цепочку: answer.strip().lower() сначала уберёт лишние пробелы, а затем переведёт ответ в нижний регистр. Так удобно проверять ответы пользователя: «Да», « да » и «ДА» превратятся в одно и то же «да». Метод find возвращает -1, если подстрока не найдена, а похожий метод index в этом случае выдаёт ошибку. Полный список методов строк есть в официальной документации Python, но для начала хватит этих семи.

Методы split и join: из строки в список и обратно

Метод split() разрезает строку на части и возвращает список, а join() — это обратная операция: склеивает список строк в одну через указанный разделитель. Эта пара встречается почти в каждой задаче с вводом нескольких значений.

line = "яблоко груша слива"
fruits = line.split()
print(fruits)
print(len(fruits))
date = "07.10.2026"
print(date.split("."))
print(" + ".join(["2", "3", "5"]))

Без аргументов split делит по пробелам и не создаёт пустых частей, даже если пробелов несколько. С аргументом он режет по указанному символу: date.split(".") даёт три части даты. Join вызывается у разделителя, а не у списка: " + ".join(...). И важно: склеивать можно только строки, поэтому числа сначала превращают через str или map(str, ...). Чтение нескольких чисел из одной строки разобрано в уроке про функцию input.

Оператор in и сравнение текста

Оператор in проверяет, входит ли один кусок текста в другой, и возвращает True или False. Сравнение через == идёт посимвольно, с учётом регистра: «Кот» и «кот» для Python не равны.

answer = "  Москва "
if answer.strip().lower() == "москва":
    print("Верно!")
print("кот" in "котлета")
print("Кот" == "кот")
print("арбуз" < "банан")

Сравнение < и > для текста работает по алфавиту, точнее по кодовым номерам букв: «арбуз» меньше «банана», потому что «а» стоит раньше «б». Заглавные буквы имеют меньшие коды, чем строчные, поэтому «Яблоко» окажется раньше «арбуза». Чтобы сравнение не зависело от регистра, оба значения приводят к lower.

f-строки: подстановка значений в текст

f-строка — это текст с буквой f перед кавычками, в которую можно вставлять переменные и выражения в фигурных скобках. Она избавляет от длинных цепочек из + и str().

name = "Аня"
score = 42
print(f"Игрок {name} набрал {score} очков")
print(f"Через год будет {score * 2}")
price = 7.456
print(f"Цена: {price:.2f}")

Внутри скобок может стоять любое выражение: арифметика, вызов функции, обращение к элементу. После двоеточия задают формат: .2f — два знака после запятой. В документации Python f-строки описаны в разделе о форматировании вывода вместе с другими способами. Подробно о выводе — в уроке про функцию print.

Задачи на строки Python с автопроверкой

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

Задачи идут от одного метода к комбинации нескольких: заглавные буквы, палиндром, подсчёт гласных, замена, инициалы и поиск самого длинного слова. Подсказку открывайте после пары своих попыток, решение — в последнюю очередь. Исследование Roediger и Karpicke показало, что попытка вспомнить и проверить себя закрепляет знания лучше перечитывания[2]. Ещё 8 упражнений — палиндромы, шифр Цезаря, работа со словами — есть в подборке задач на строки.

Когда строка не подходит

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

  • Меняете 1 букву за другой в длинном тексте. Каждая правка создаёт новую копию; удобнее превратить текст в список букв, а в конце собрать через join.
  • Храните 30 оценок ученика. Строка «5 4 5 3» неудобна для подсчётов — держите числа в списке.
  • Считаете с числами из 2 вводов. Без int() «2» + «3» даст «23», а не 5.
  • Сопоставляете 50 слов и переводов. Для пар «слово — значение» нужен словарь, а не один длинный текст.

«Метод replace меняет текст на месте». Это миф: он возвращает новый результат, а исходный остаётся прежним, пока результат не присвоен.

«Одинарные и двойные кавычки дают разные типы данных». Это не подтверждается: 'да' == "да" возвращает True, это одно и то же значение.

Чего делать нельзя

Нельзя менять букву по индексу — текст неизменяем, и Python ответит ошибкой TypeError. Остальные правила помогают избежать тихих ошибок, когда программа работает, но выдаёт не то.

  • Нельзя складывать текст с числом без str(): "Очки: " + 5 вызовет TypeError.
  • Не следует вызывать метод без присваивания, если нужен результат: s.upper() сам по себе ничего не меняет.
  • Не стоит сравнивать ответ пользователя без strip и lower — лишний пробел или заглавная буква сделают верный ответ «неверным».
  • Не допускается обращаться к индексу, равному длине: у слова из 5 букв последний индекс 4.
  • Нельзя склеивать через join список чисел — сначала превратите их в текст через map(str, ...).
  • Не стоит называть переменную str: это имя встроенного типа, после замены str(5) перестанет работать.

Именование переменных и оформление кода описаны в руководстве PEP 8[3]. Типы данных и их преобразование разобраны на странице о типах данных Python.

Источники

[1] The Python Tutorial (официальная документация Python 3). Python Software Foundation.

[2] Roediger H. L., Karpicke J. D. Test-enhanced learning: Taking memory tests improves long-term retention // Psychological Science. 2006. Vol. 17, № 3. P. 249–255.

[3] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.

[4] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».

Вопросы и ответы

Какие кавычки лучше: одинарные или двойные?

Разницы нет, Python понимает оба вида. Руководство PEP 8 советует выбрать один стиль и придерживаться его во всём файле.

Как узнать, есть ли в тексте цифры?

Переберите буквы циклом и проверьте каждую методом isdigit(). Если весь ввод должен быть числом, вызовите isdigit() у всего ответа перед int().

Почему в задачах на ОГЭ важна обработка текста?

По федеральной образовательной программе обработка текста входит в темы 8 класса, поэтому такие задания встречаются и на уроках, и при подготовке к экзаменам.

Как перевернуть каждое слово во фразе?

Разрежьте фразу через split(), переверните каждое слово срезом [::-1] и склейте обратно через " ".join(...).

Можно ли сравнивать русские и английские буквы?

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

Зачем нужны пустые кавычки?

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