Урок 5 из 8 · 20 мин · обновлено
Строки: срезы, методы и f-строки
Как достать из строки нужный символ или кусок, привести текст в порядок готовыми методами и удобно собрать фразу из переменных.
Строка — это последовательность символов
Каждый символ строки имеет свой номер — индекс. Нумерация начинается с нуля:
word = "Python"
print(word[0]) # P
print(word[1]) # y
print(word[-1]) # n — последний символ
print(len(word)) # 6 — длина строки
Отрицательные индексы считают с конца: -1 — последний символ, -2 — предпоследний. Это удобно, когда длина строки заранее неизвестна.
Срезы
Срез берёт кусок строки: строка[начало:конец]. Как и в range(), конец не входит:
phone = "+79161234567"
print(phone[0:2]) # +7
print(phone[2:5]) # 916 — код оператора
print(phone[-4:]) # 4567 — последние 4 цифры
print(phone[::-1]) # 76543216197+ — строка задом наперёд
Если начало или конец не указан, срез идёт от начала или до конца строки.
Полезные методы
Метод — это функция, которая «принадлежит» значению и вызывается через точку. У строк их много, но в начале хватит этих:
| Метод | Что делает | Пример | Результат |
|---|---|---|---|
strip() |
убирает пробелы по краям | " да ".strip() |
"да" |
lower(), upper() |
меняет регистр | "Да".upper() |
"ДА" |
replace(a, b) |
заменяет одно на другое | "8-916".replace("-", "") |
"8916" |
split() |
режет строку на список | "a b c".split() |
["a", "b", "c"] |
join() |
склеивает список в строку | ", ".join(["a", "b"]) |
"a, b" |
startswith() |
проверяет начало | "+7916".startswith("+7") |
True |
Важная особенность: строки неизменяемы. Метод не меняет исходную строку, а возвращает новую — поэтому результат сохраняют в переменную:
name = " анна "
name.strip() # результат никуда не сохранён — name не изменилась
name = name.strip() # теперь name == "анна"
Методы можно вызывать цепочкой — каждый следующий работает с результатом предыдущего:
email = " Anna@Mail.RU "
print(email.strip().lower()) # anna@mail.ru
f-строки
Собирать фразу из кусков через запятые неудобно. Для этого есть f-строки — строки с буквой f перед кавычками, внутри которых в фигурных скобках можно подставлять значения:
name = "Анна"
total = 1250.5
print(f"{name}, ваш заказ на {total} ₽ принят")
print(f"Итого со скидкой: {total * 0.9:.2f} ₽")
Результат:
Анна, ваш заказ на 1250.5 ₽ принят
Итого со скидкой: 1125.45 ₽
Запись :.2f после выражения означает «показать два знака после запятой».
Попробуйте сами. Пользователь ввёл имя небрежно: raw = " иВАН ". Приведите его к виду Иван и выведите приветствие Здравствуйте, Иван! через f-строку. Подсказка: у строк есть метод capitalize() — он делает первую букву заглавной, а остальные строчными.
Решение
raw = " иВАН "
name = raw.strip().capitalize()
print(f"Здравствуйте, {name}!")
Такая очистка ввода — обычная задача в реальных программах: пользователи ставят лишние пробелы и путают регистр, а данные должны храниться в одном виде.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Что выведет print('python'[0])?
Нумерация символов начинается с нуля, поэтому [0] — это первая буква.
-
Что выведет print('python'[-1])?
Отрицательные индексы считают с конца: -1 — последний символ, -2 — предпоследний.
-
Переменная email = ' Anna@Mail.ru '. Что вернёт email.strip().lower()?
strip() убирает пробелы по краям, lower() переводит буквы в нижний регистр. Методы можно вызывать цепочкой — каждый работает с результатом предыдущего.
-
Как с помощью f-строки вывести «Итого: 450 ₽», если price = 450?
Буква f перед кавычками включает подстановку: всё, что в фигурных скобках, Python заменит значением. Без f скобки останутся в тексте как есть, а склейка строки с числом через + вызовет ошибку.