Программирование и IT
Python: строки
Строка в Python — неизменяемая последовательность символов. Из этого следуют почти все её особенности: методы не меняют строку, а возвращают новую, а быстрая сборка текста идёт через join, а не через сложение в цикле. Ниже — рабочий минимум с примерами и выводом.
В этой статье
Что такое строка и почему её нельзя изменить#
Строка записывается в одинарных, двойных или тройных кавычках — разницы между
'a' и "a" нет, тройные кавычки нужны для многострочного текста. Отдельного
типа «символ» в языке нет: "кот"[0] — это строка длиной один.
Главное свойство — неизменяемость. Попытка записать символ на место даёт ошибку:
=
=
# TypeError: 'str' object does not support item assignment
Поэтому все методы строк возвращают новое значение, а исходное оставляют как
было. Частая ошибка новичка — вызвать метод и забыть присвоить результат:
=
# ' Анна '
=
# 'Анна'
Разрезать и собрать: split и join#
Две самые нужные операции — разбить строку на части и склеить части в строку.
=
# ['яблоко', 'груша', '', 'слива']
# ['a', 'b']
split(",") режет по каждому вхождению, поэтому два разделителя подряд дают
пустую строку в списке. Вызов split() без аргумента ведёт себя иначе: он режет
по любым пробельным символам, склеивает их подряд идущие группы и отбрасывает
пробелы по краям.
Обратная операция — join. Метод вызывается у разделителя, а не у списка, и
требует, чтобы все элементы уже были строками:
# a, b, c
# TypeError: sequence item 0: expected str instance, int found
# 1, 2
Поиск, замена, проверка#
=
# True
# 10
# -1
# 2
# МАма мыла раму
find возвращает индекс первого вхождения или -1, если его нет; index
делает то же самое, но при отсутствии подстроки бросает ValueError. У
replace третий аргумент ограничивает число замен.
Для проверок годятся startswith, endswith и семейство is*:
"2026".isdigit() даёт True, а "12.5".isdigit() — уже False, потому что
точка не цифра. Проверять число этим методом надёжно только для целых без знака.
f-строки вместо сложения#
Собирать текст сложением неудобно и легко забыть про типы: "итого " + 5 падает
с TypeError. f-строка подставляет любое значение и сразу умеет форматировать:
= 1234.5678
=
# чай: 1234.57 руб.
# 'чай' — 3 букв
# " 42|"
Внутри фигурных скобок — обычное выражение, после двоеточия — формат: .2f —
два знака после точки, >6 — выравнивание вправо по ширине шесть, , —
разделитель тысяч. Символ !r печатает значение так, как его показал бы
repr, — это удобно для отладки, потому что видно кавычки и пробелы.
Ловушки, на которых спотыкаются все#
strip принимает набор символов, а не подстроку. Это самая популярная
ошибка:
# repor
# report
strip(".txt") срезает с краёв любые символы из множества {'.', 't', 'x'} —
и не останавливается на расширении, а съедает ещё и t в конце слова report.
Чтобы отрезать именно окончание, есть removesuffix и removeprefix (доступны
начиная с Python 3.9).
Склейка в цикле. result += chunk внутри длинного цикла каждый раз создаёт
новую строку. Правильнее накопить части в списке и один раз вызвать join.
Регистр и сравнение. "Привет".lower() даёт "привет", но для
регистронезависимого сравнения текстов лучше casefold() — он аккуратнее
работает с нелатинскими алфавитами.
Небольшое задание напоследок: возьми строку "Иванов; 35; Москва", разбери
её на три поля, убери лишние пробелы и собери обратно в виде
"Москва | Иванов (35)" — одной f-строкой, без сложения через плюс.
Дальше стоит посмотреть срезы — на строках они работают
так же, как на списках, — и регулярные выражения,
когда обычных методов поиска перестаёт хватать.
План по этапам
- Проверить неизменяемостьВ интерактивной оболочке присвоить s[0] и увидеть TypeError; затем сделать то же через замену.
- Прогнать десять методовupper, lower, strip, split, join, replace, find, count, startswith, removesuffix — каждый с печатью результата.
- Собрать таблицу f-строкамиВывести пять строк с выравниванием по ширине и двумя знаками после точки.
- Разобрать строку данныхВзять строку «имя;возраст;город», разрезать split, собрать обратно join с другим разделителем.
- Поймать ловушку stripСравнить strip(".txt") и removesuffix(".txt") на имени report.txt и записать разницу.
Начать изучать эту тему у себя
План ляжет в твой репозиторий: отмечай этапы, веди конспект — история изменений покажет, как ты продвинулся.
Проверь себя
1.Что выведет print(", ".join(["a", "b", "c"]))?
2.Что делает вызов "report.txt".strip(".txt")?
3.Чему равно len("abc" * 3)?
4.Что вернёт "мама мыла раму".find("папу")?
Источники
-
Строковые методы в документации PythonПолный список методов str с описанием аргументовбесплатно
-
Учебник Python: введениеОфициальный вводный курс, раздел про строкибесплатно
-
StepikБесплатные курсы по Python с автопроверкой задачбесплатно
Было полезно?