Что такое строка в 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])
| Символ | п | р | о | г | р | а | м | м | а |
| Индекс | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| С конца | -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(...).
Можно ли сравнивать русские и английские буквы?
Можно, но результат зависит от кодовых номеров: все латинские буквы имеют меньшие коды, чем кириллица. Для алфавитной сортировки смешанных слов этого обычно хватает.
Зачем нужны пустые кавычки?
Это текст без единой буквы: "". Её используют как начальное значение, когда результат собирают по кусочкам в цикле, — так же, как ноль для суммы.