Курс: Python

Лекция: Работа со строками

Строки в Python - упорядоченные последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме. Это первая часть о работе со строками, а именно о литералах строк.

Литералы строк

Работа со строками в Python очень удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.

Строки в апострофах и в кавычках

S1 = 'Фильм "Анаконда" оказался так себе.'
S2 = "Д'Артаньян вскочил на коня."

Строки в апострофах и в кавычках - одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.

Экранированные последовательности - служебные символы

Экранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.

Экранированная последовательностьНазначение
\nПеревод строки
\aЗвонок
\bЗабой
\fПеревод страницы
\rВозврат каретки
\tГоризонтальная табуляция
\vВертикальная табуляция
\N{id}Идентификатор ID базы данных Юникода
\uhhhh16-битовый символ Юникода в 16-ричном представлении
\Uhhhh…32-битовый символ Юникода в 32-ричном представлении
\xhh16-ричное значение символа
\ooo8-ричное значение символа
\0Символ Null (не является признаком конца строки)

"Сырые" строки - подавляют экранирование

Если перед открывающей кавычкой стоит символ 'r' (в любом регистре), то механизм экранирования отключается.

S = r'C:\windows\new.txt'

Строки в тройных апострофах или кавычках

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

Базовые операции

Конкатенация (сложение) +.

a = 'Привет, '
b = "мир!"
print (a + b)

Дублирование строки *.

print ("ма"*2)

Длина строки (функция len).

print (len('Три'))

Доступ по индексу:

s = 'А роза упала на лапу Азора'
print (s[4]+s[5]+s[-10])
#выведет "зал"

Как видно из примера, в python возможен и доступ по отрицательному индексу, при этом отсчет идет от конца строки.

Оператор извлечения среза: [X:Y]. X – начало среза, а Y – окончание; символ с номером Y в срез не входит. По умолчанию первый индекс равен 0, а второй - длине строки.

s = 'А роза упала на лапу Азора'
print (s[4:8])
#выведет "за у"
print (s[4:-8])
#выведет "за упала на ла"
print (s[:8])
#выведет "А роза у"
print (s[8:])
#выведет "пала на лапу Азора"
print (s[:])
#выведет "А роза упала на лапу Азора"

Кроме того, можно задать шаг, с которым нужно извлекать срез.

s = 'А роза упала на лапу Азора'
print (s[-7:6:-3])
#выведет "улнлу"

Задание 2.1. Разворот слов в предложении

Запросить у пользователя предложение без знаков препинания и вывести строку с развернутыми словами. Пример работы:

Введите предложение: Кота манит ток
Разворот по словам: атоК тинам кот

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

s = 'А роза упала на лапу Азора'
s[1] = 'ц'
# python выведет ошибку

Поэтому все строковые методы возвращают новую строку, которую потом следует присвоить переменной.

Таблица "Функции и методы строк"

S.find(str, [start],[end])Поиск подстроки в строке. Возвращает номер первого вхождения или -1
S.rfind(str, [start],[end])Поиск подстроки в строке. Возвращает номер последнего вхождения или -1
S.index(str, [start],[end])Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError
S.rindex(str, [start],[end])Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError
S.replace(шаблон, замена)Замена шаблона
S.split(символ)Разбиение строки по разделителю
S.isdigit()Состоит ли строка из цифр
S.isalpha()Состоит ли строка из букв
S.isalnum()Состоит ли строка из цифр или букв
S.islower()Состоит ли строка из символов в нижнем регистре
S.isupper()Состоит ли строка из символов в верхнем регистре
S.isspace()Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы ('\f'), "новая строка" ('\n'), "перевод каретки" ('\r'), "горизонтальная табуляция" ('\t') и "вертикальная табуляция" ('\v'))
S.istitle()Начинаются ли слова в строке с заглавной буквы
S.upper()Преобразование строки к верхнему регистру
S.lower()Преобразование строки к нижнему регистру
S.startswith(str)Начинается ли строка S с шаблона str
S.endswith(str)Заканчивается ли строка S шаблоном str
S.join(список)Сборка строки из списка с разделителем S
ord(символ)Символ в его код ASCII
chr(число)Код ASCII в символ
S.capitalize()Переводит первый символ строки в верхний регистр, а все остальные в нижний
S.center(width, [fill])Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию)
S.count(str, [start],[end])Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию)
S.expandtabs([tabsize])Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам
S.lstrip([chars])Удаление пробельных символов в начале строки
S.rstrip([chars])Удаление пробельных символов в конце строки
S.strip([chars])Удаление пробельных символов в начале и в конце строки
S.partition(шаблон)Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки
S.rpartition(sep)Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку
S.swapcase()Переводит символы нижнего регистра в верхний, а верхнего – в нижний
S.title()Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний
S.zfill(width)Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями
S.ljust(width, fillchar=" ")Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar
S.rjust(width, fillchar=" ")Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar
S.format(*args, **kwargs)Форматирование строки

Задание 2.2. Разворот предложения по словам

Запросить у пользователя предложение без знаков препинания и вывести строку с развернутыми словами. Пример работы:

Введите предложение: Завтра идем купаться
Разворот по словам: Купаться идем завтра

Задание 2.3. Самое длинное слово

Запросить у пользователя предложение без знаков препинания и вывести самое длинное слово. Пример работы:

Введите предложение: Завтра идем купаться
Самое длинное слово: купаться

Задание 2.4. Калькулятор дробей

Запросить у пользователя два числа в виде 12#3/5, где до знака # идет целая часть, между # и / - числитель, после / идет знаменатель и операцию. Вывести результат в аналогичном виде. Пример работы:

Первое число (a#b/c): -2#1/2
Второе число (a#b/c): 1#1/3
Операция (+-*/): +
Результат: -2#1/2 + 1#1/3 = -1#1/6