Вы уже умеете хранить текст в переменных и выводить его на экран. Но по-настоящему полезной строка становится, когда вы умеете её собирать из кусочков, вставлять в неё значения других переменных и приводить к нужному виду — убирать лишние пробелы, менять регистр, разбивать на части. Именно этому и посвящён урок.
Склейка и повторение строк
Представьте, что у вас есть два листочка бумаги: на одном написано «Иван», на другом — «Петров». Чтобы получить полное имя, вы просто кладёте листочки рядом. В Python то же самое делает оператор +: он ставит одну строку сразу после другой.
Такое соединение строк называется конкатенацией — в документации Python вы встретите именно это слово. Оно означает буквально «склеивание в одну цепочку».
first = "Иван"
last = "Петров"
full_name = first + " " + last
print(full_name)
Разбор: first и last — переменные со строками. В третьей строке три куска склеиваются подряд: first, пробел " ", затем last. Результат — новая строка "Иван Петров" в full_name. Пробел между именем и фамилией мы добавили сами: Python никогда не добавляет пробелы за вас, строки склеиваются ровно так, как вы написали.
+ работает только между строками. Если слева или справа от него окажется число, Python выдаст ошибку — строку и число нужно сначала привести к одному типу через str().age = 20
# print("Мне " + age + " лет") # ОШИБКА: строка + число
print("Мне " + str(age) + " лет") # Мне 20 лет
Строку string можно ещё и умножить на число — Python повторит её нужное количество раз подряд. Это оператор *, и работает он только с парой «строка и число».
line = "-" * 20
print(line)
Строка «минус» умножается на 20 — Python берёт символ "-" и повторяет его 20 раз подряд, склеивая результаты в одну строку: --------------------. Такой приём удобен для разделителей и рамок — не нужно печатать чёрточки вручную.
f-строки — вставляем значения прямо в текст
Склеивать плюсами удобно, пока кусочков мало. А если в одном предложении нужно подставить имя, возраст и город, из плюсов и кавычек получается каша, в которой легко ошибиться. Гораздо удобнее оставить готовый текст и просто сделать в нём «окошки», куда сами подставятся значения.
Именно так работают f-строки (f-string, от «formatted string literal») — способ форматирования строк, который в Python считается основным. Перед открывающей кавычкой пишется буква f, а внутри текста в фигурных скобках {} указывается переменная или любое выражение.
name = "Анна"
age = 24
greeting = f"Привет! Меня зовут {name}, мне {age} лет."
print(greeting)
Буква f перед кавычкой говорит Python: «в этой строке ищи фигурные скобки и подставляй в них значения». {name} заменяется на содержимое переменной name, {age} — на содержимое age. Всё остальное — обычный текст, он остаётся без изменений. Результат: Привет! Меня зовут Анна, мне 24 лет.
price = 1500
discount = 300
print(f"Цена со скидкой: {price - discount} руб.")
name = "иван"
print(f"Добро пожаловать, {name.upper()}!")
В первом примере внутри скобок — выражение price - discount: Python вычислит 1500 - 300 и подставит число 1200. Во втором внутри скобок вызывается метод name.upper() — сначала Python получит "ИВАН", потом вставит эту строку вместо скобок. Про сам метод upper() поговорим чуть ниже.
Спецсимволы: как напечатать то, что нельзя напечатать
Если внутри кавычек нажать Enter, Python решит, что строка закончилась раньше времени, и выдаст ошибку. А как тогда получить перенос строки внутри текста, который печатается одной командой print()? Для таких случаев в строке используют особый «код» — сочетание из обратной косой черты и буквы.
Такие сочетания называются управляющими последовательностями, или escape-последовательностями (от английского «escape» — «сбежать, вырваться»: символ как будто вырывается из обычного текста и получает особый смысл). Python видит \n не как два обычных символа «слеш» и «n», а как один специальный символ переноса строки.
| Символ | Что делает | Пример |
|---|---|---|
\n |
Переносит текст на новую строку | print("Раз\nДва") выведет два слова на разных строках |
\t |
Добавляет отступ, как нажатие клавиши Tab | print("Имя:\tИван") |
\\ |
Печатает сам символ обратного слеша | print("C:\\Users") выведет C:\Users |
\" |
Печатает кавычку внутри строки в таких же кавычках | print("Он сказал \"привет\"") |
Разбор первого примера: "Раз\nДва" — это одна строка из пяти видимых символов и одного спецсимвола. Когда print() её печатает, вместо \n курсор переходит на новую строку, поэтому «Раз» и «Два» оказываются на разных строчках экрана, хотя в коде это одна строка.
len() и методы строк
Строка в Python — это не просто текст, а объект, у которого есть набор готовых «умений»: посчитать длину, перевести буквы в верхний регистр, убрать лишние пробелы. Такие встроенные умения называются методами. Метод вызывается через точку сразу после строки: строка.метод().
Отдельно стоит функция len(), которую вы уже видели в предыдущем уроке: это не метод, а обычная функция, поэтому вызывается снаружи — len(строка), а не строка.len(). Она возвращает количество символов в строке, включая пробелы.
name = "Александра"
print(len(name))
Python считает символы в строке "Александра" один за другим и возвращает число 10. Пробелы, если бы они были, тоже посчитались бы.
Очень важное правило про все методы строк: они не изменяют исходную строку, а возвращают новую. Строки в Python неизменяемы (immutable) — их нельзя «поправить на месте». Чтобы сохранить результат, его нужно присвоить переменной.
name = "иван"
name.upper() # результат никуда не сохранён
print(name) # иван — строка не изменилась
name = name.upper() # сохранили результат в ту же переменную
print(name) # ИВАН
В первом вызове Python создаёт строку "ИВАН", но никуда её не записывает — она тут же теряется, а name остаётся прежним. Во втором мы явно кладём результат обратно в name через =, поэтому переменная меняется.
Шесть методов, которые пригодятся сразу
| Метод | Что делает | Пример | Результат |
|---|---|---|---|
upper() |
Переводит все буквы в верхний регистр | "привет".upper() |
"ПРИВЕТ" |
lower() |
Переводит все буквы в нижний регистр | "ПРИВЕТ".lower() |
"привет" |
strip() |
Убирает пробелы (и переносы строк) с обоих концов | " привет ".strip() |
"привет" |
replace(old, new) |
Заменяет все вхождения old на new | "ха-ха".replace("ха", "хо") |
"хо-хо" |
split(sep) |
Разбивает строку по разделителю, возвращает список частей | "a,b,c".split(",") |
['a', 'b', 'c'] |
count(sub) |
Считает, сколько раз sub встречается в строке | "банан".count("ан") |
2 |
replace() и split() принимают аргументы в скобках, как и print(). У replace("ха", "хо") два аргумента: что ищем и на что заменяем. У split(",") один аргумент — разделитель; результат — список из кусочков (списки разберём позже, пока достаточно знать, что это несколько значений в квадратных скобках через запятую).
" иван петров ".strip().title(). Сначала уйдут пробелы по краям, затем первая буква каждого слова станет заглавной. Метод title() работает как upper()/lower(), только приводит к виду «Каждое Слово С Большой Буквы» — удобно для имён.Пример: проверка email
Методы строк и логические операторы часто работают вместе. Вот программа, которая проверяет, похож ли введённый адрес на email:
email = input("Введите email: ").strip().lower()
has_at = "@" in email
looks_valid = has_at and (".ru" in email or ".com" in email)
print(looks_valid)
Сначала strip() убирает случайные пробелы по краям, а lower() приводит буквы к нижнему регистру — так Ivan@Mail.RU и ivan@mail.ru проверятся одинаково. Оператор in проверяет, встречается ли один кусочек текста внутри другого, и возвращает True или False: "@" in email спрашивает, есть ли собачка в адресе. and требует, чтобы верными были обе части проверки, or — чтобы верной была хотя бы одна.
has_at and ".ru" in email or ".com" in email Python прочитает как (has_at and ".ru" in email) or (".com" in email) — тогда любой адрес на .com засчитается верным, даже без @. Скобки выше расставлены специально: сначала проверяем оба домена вместе, потом объединяем с проверкой на @.Частые ошибки
str()."Возраст: " + 20 вызовет TypeError. Python не станет сам превращать число в текст — это нужно сделать явно: "Возраст: " + str(20).text.strip() сама по себе ничего не меняет — нужно записать результат: text = text.strip(). Иначе «очистка» просто теряется.f перед строкой. Без неё Python не станет искать фигурные скобки и вставлять значения — просто напечатает текст "Привет, {name}!" буквально, вместе со скобками.Что важно запомнить
+ и повторяются оператором *. Складывать строку с числом напрямую нельзя — число нужно перевести через str().f перед кавычкой, переменные и выражения — в фигурных скобках {}.\n и \t задают перенос строки и табуляцию, которые нельзя напечатать обычными клавишами.len(строка) — функция, считает длину. Методы upper(), lower(), strip(), replace(), split(), count() вызываются через точку и не меняют исходную строку, а возвращают новую.Проверьте себя
3 вопроса
Форматирование имени
Дана строка full_name = " иван петров ". Уберите лишние пробелы по краям и сделайте первую букву каждого слова заглавной — примените два метода строки, которые для этого нужны, один за другим. Результат сохраните обратно в full_name и выведите его.
Пример: должно получиться Иван Петров.
Разделитель и конкатенация
Создайте строку separator из символов "=" длиной 30 символов (используйте умножение строки на число). Затем создайте строку phrase, склеив через + три слова: "Python", "это" и "круто" — через пробел. В конце выведите: разделитель, фразу и снова разделитель, каждое на отдельной строке.
Пример вывода:
============================== Python это круто ==============================