Курс: Python
Лекция: Работа со строками
Строки в Python - упорядоченные последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме. Это первая часть о работе со строками, а именно о литералах строк.
Литералы строк
Работа со строками в Python очень удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.
Строки в апострофах и в кавычках
S1 = 'Фильм "Анаконда" оказался так себе.' S2 = "Д'Артаньян вскочил на коня."
Строки в апострофах и в кавычках - одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.
Экранированные последовательности - служебные символы
Экранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.
Экранированная последовательность | Назначение |
---|---|
\n | Перевод строки |
\a | Звонок |
\b | Забой |
\f | Перевод страницы |
\r | Возврат каретки |
\t | Горизонтальная табуляция |
\v | Вертикальная табуляция |
\N{id} | Идентификатор ID базы данных Юникода |
\uhhhh | 16-битовый символ Юникода в 16-ричном представлении |
\Uhhhh… | 32-битовый символ Юникода в 32-ричном представлении |
\xhh | 16-ричное значение символа |
\ooo | 8-ричное значение символа |
\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