Урок 4
Работа со строками

Учимся выполнять основные действия над строковым типом данных в Python: создание, экранирование, конкатенация и умножение, срезы, форматирование, строковые методы.
Logo Python Course Lesson 4
Урок 4
Работа со строками
Учимся выполнять основные действия над строковым типом данных в Python: создание, экранирование, конкатенация и умножение, срезы, форматирование, строковые методы.

ТЕОРЕТИЧЕСКИЙ БЛОК

В КОНЦЕ УРОКА ЕСТЬ ВИДЕО
One
1

Что такое строка и как ее создать в Python?

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

Последовательности могут быть как изменяемыми, так и неизменяемыми. Размерность и состав созданной однажды неизменяемой последовательности не может меняться, вместо этого обычно создаётся новая последовательность.

Примеры последовательностей в стандартной библиотеке Python:
  1. Список (list) - изменяемая
  2. Кортеж (tuple) - неизменяемая
  3. Диапазон (range) - неизменяемая
  4. Строка (str, unicode) - неизменяемая
Строки можно создать несколькими способами:
1. С помощью одинарных и двойных кавычек.
Например:
Python

first_string = 'Я текст в одинарных кавычках'
second_string = "Я текст в двойных кавычках"
Строки в одинарных и двойных кавычках - одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в строки символы кавычек, не используя экранирование. Например вот так(обратите внимание на кавычки внутри строки):
Python

first_string = 'Слово "Python" обычно подразумевает змею'
second_string = "I'm learning Python"
Идем дальше.

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

my_string = '''Это очень длинная
строка, ей нужно
много места'''
Python Строки str создание
Способы создания строк в Python
3. С помощью метода str().
Как это работает:
Python

my_num = 12345
my_str = str(my_num)
В данном случае мы создали новую строку путем конвертации переменной другого типа(например, int).
Two
2

Экранирование строк

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

В таблице перечислены самые часто используемые экранированные последовательности:
Теперь посмотрим, как каждая из них работает:
Python

# Обычная строка
>>> str = 'Моя строка вот такая'
>>> print(str)
Моя строка вот такая

# Добавим символ переноса строки
>>> str = 'Моя строка\n вот такая'
>>> print(str)
Моя строка
 вот такая

# А теперь добавим возврат каретки
>>> str = 'Моя строка\n вот\r такая'
>>> print(str)
Моя строка
 такая

# Горизонтальная табуляция(добавит отступ)
>>> str = '\tМоя строка вот такая'
>>> print(str)
    Моя строка вот такая

# Вертикальная табуляция(добавит пустую строку)
>>> str = '\vМоя строка вот такая'
>>> print(str)

Моя строка вот такая

# Добавим китайский иероглиф в строку
>>> str = 'Моя строка \u45b2 вот такая'
>>> print(str)
Моя строка 䖲 вот такая
"Сырые строки"
Если перед открывающей кавычкой стоит символ 'r' (в любом регистре), то механизм экранирования отключается.
Это может быть нужно, например, в такой ситуации:
str = r'C:\new_file.txt'

Three
3

Методы для работы со строками

Методов для работы со строками довольно много. Может возникнуть вопрос - а как же не запутаться в их многообразии? Ответ на него такой - необходимо структурировать и разбить методы по группам.
Python строки str методы
Работа со строками в Python. Классификация методов.
Итак, строки в Python поддерживают две группы методов:

Группа 1. Общие методы для всех Sequence Type данных.
В Python cуществуют 3 базовых типа Последовательностей(Sequence Type):
  1. Списки(list)
  2. Кортежи(tuple)
  3. Диапазоны(range).
И также есть дополнительные типы последовательностей для:
  1. Обработки двоичных данных(binary data) и
  2. Текстовых строк(str).
Все эти типы данных(базовые и дополнительные) поддерживают общую группу операций. Например:
Подробнее об общих операциях для Sequence Type данных можно почитать в официальной документации по Python.
Подытожим
Строки в Python - представители Sequence Type данных. Это значит, что они(наряду со списками, кортежами и диапазонами) поддерживают все операции, приведенные в таблице выше.
Группа 2. Дополнительные методы, которые работают только со строками
Помимо общих операций, которые мы рассмотрели в таблице выше, существуют методы, которые могут быть использованы только для работы с типом str. В ходе урока рассмотрим самые важные и часто используемые из них.
Four
4

Операции со строками. Конкатенация и умножение.

Python строки str конкатенация умножение
Строки в Python. Конкатенация и умножение.
Далее будем рассматривать базовые операции, которые можно выполнять со строками. Начнем со сложения и умножения строк. Они, как мы уже выяснили выше, относятся к группе общих операций над последовательностями. Итак:

1. Оператор сложения строк +
+ — оператор конкатенации строк. Он возвращает строку, состоящую из совокупности других строк.
Например:
Python

>>> a = 'Вот так работает' 
>>> b = ' конкатенация строк'
>>> a + b
'Вот так работает конкатенация строк'
2. Оператор умножения строк *
* — оператор создает несколько копий строки. Если str это строка, а n целое число, то будет создано n копий строки str.
Python

>>> str = 'Строка'
>>> 5 * str
'СтрокаСтрокаСтрокаСтрокаСтрока'
Five
5

Операции со строками. Срезы.

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

Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности.

Индекс - номер символа в строке (а также в других структурах данных: списках, кортежах). Обратите внимание, что нумерация начинается с 0. Если указать отрицательное значение индекса, то номер будет отсчитываться с конца, начиная с номера -1.

Есть три формы срезов:
1. Самая простая форма среза - взятие одного символа строки - S[i], где S - строка, i - индекс. Пример:
Python

>>> str = 'Hello'
>>> str[0]
'H'
>>> str[4]
'o'
>>> str[-5]
'H'
>>> str[6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
Python строки str индексация
2. Второй тип - срез с двумя параметрами. Т. е. S[a:b] возвращает подстроку, начиная с символа c индексом a до символа с индексом b, не включая его. Если опустить второй параметр (но поставить двоеточие), то срез берется до конца строки. Пример:
Python

>>> str = 'Hello'
>>> str[0:4]
'Hell'
>>> str[0:5]
'Hello'
>>> str[1:3]
'el'
>>> str[1:]
'ello'
>>> str[0:]
'Hello'
3. Срез с тремя параметрами - S[a:b:d]. Третий параметр задает шаг(как в случае с функцией range), то есть будут взяты символы с индексами a, a + d, a + 2 * d и т. д. Например, при задании значения третьего параметра, равному 2, в срез попадет каждый второй символ:
Python

>>> str = 'Hello'
>>> str[0:5:1]
'Hello'
>>> str[::1]
'Hello'
>>> str[0:5:2]
'Hlo'
>>> str[::2]
'Hlo'
И еще разок: строки в Python - это неизменяемый тип данных!
Любые операции среза со строкой создают новые строки и никогда не меняют исходную строку. В Питоне строки вообще являются неизменяемыми, их невозможно изменить. Можно лишь в старую переменную присвоить новую строку.

Задачи по темам


Решаем задачи и отвечаем на вопросы по теме "Списки": работаем с типом данных list

Специфика типа данных словарь (dict) в Python, характеристики. Примеры использования словарей, задачи с решениями.

Строки как тип данных в Python. Основные методы и свойства строк. Примеры работы со строками, задачи с решениями.

Six
6

Операции со строками. Дополнительные методы.

Далее давайте рассмотрим методы второй группы, которые были созданы специально для работы с данными типа str. Полный и актуальный список методов можно посмотреть на странице официальной документации. И как вы сможете заметить, их там немало. Мы же с вами перечислим самые полезные из них и популярные, а так же рассмотрим несколько примеров их использования. Итак, список:
Пример того, как именуются различные строки(и соответствующие методы) в зависимости от регистра:

Заголовок(Title): ‘Hello Everybody’
Строка с заглавной буквы(Capital): ‘Hello everybody’
Верхний регистр:(Upper) ‘HELLO EVERYBODY’
Нижний регистр(Lower): ‘hello everybody’
А теперь для лучшего понимания добавим несколько примеров использования данных методов:
Python

# Делаем строку заголовком
>>> str.title('hello everybody')
'Hello Everybody'

# Начинаем строку с заглавной буквы
>>> str.capitalize('hello everybody')
'Hello everybody'

# Переводим строку в верхний регистр
>>> str.upper('hello everybody')
'HELLO EVERYBODY'

# Переводим строку в нижний регистр
>>> str.lower('Hello Everybody')
'hello everybody'

# Инверсия регистра
>>> str.swapcase('Hello Everybody')
'hELLO eVERYBODY'

# Проверяем, являются ли строки заголовками
>>> str.istitle('Hello everybody')
False
>>> str.istitle('HELLO EVERYBODY')
False
>>> str.istitle('Hello Everybody')
True

Несколько примеров использования данных методов:
Python


# Соединяем строки в списке ['Users','Shared','Relocate'] через разделитель '/'
>>> '/'.join(['Users','Shared','Relocate'])
'Users/Shared/Relocate'

# Разбиваем строку по разделителю '/'
>>> 'Users/Shared/Relocate/Items'.split('/')
['Users', 'Shared', 'Relocate', 'Items']

# Разбиваем строку на 3 части по разделителю ':/'
>>> 'C:/Folder/Items/Bin'.partition(':/')
('C', ':/', 'Folder/Items/Bin')
Функции поиска
Как вы уже могли заметить, в Python существует две похожих функции для поиска подстроки - find()(относится к группе строковых методов) и index()(общий метод для SequenceType данных). Разница в том, что find() вернет -1, если не найдет искомое, а index() выкинет исключение ValueError.

Кроме того, необходимо помнить, что если нужно только удостовериться, что подстрока присутствует внутри строки - можно просто воспользоваться методом in:
>>> 'Py' in 'Python'
True
Далее приводим примеры использования:
Python

# Ищем подстроку 'Еще одна' в начале строки
>>> 'Еще одна тестовая строка'.startswith('Еще одна')
True
# Ищем подстроку 'тестовая' начиная с индекса 9
>>> 'Еще одна тестовая строка'.startswith('тестовая', 9 )
True

# Ищем подстроку 'строка' в конце строки
>>> 'Еще одна тестовая строка'.endswith('строка')
True

# Ищем подстроки внутри строки
>>> 'Тестируем функцию поиска'.find('функцию')
10
>>> 'Тестируем функцию поиска'.find('а такой подстроки здесь нет')
-1

# Ищем подстроку 'Тестируем' и заменяем ее на 'Протестировали'
>>> 'Тестируем функцию замены'.replace('Тестируем', 'Протестировали')
'Протестировали функцию замены'
# Ищем все вхождения подстроки 'е' и заменяем каждое на 'Х'
>>> 'Еще один тест'.replace('е', 'Х')
'ЕщХ один тХст'
Seven
7

Форматирование строк. f-строки.

Python строки str форматирование
Строки в Python. Форматирование.
В Python версии 3.6 был представлен новый способ форматирования строк. Эта функция официально названа литералом отформатированной строки, но обычно упоминается как f-string. Способов форматирования в Python довольно много, но работу с f-строками мы считаем самым удобным и перспективным способом, поэтому рассмотрим именно его.

Одной простой особенностью f-строк, которую вы можете начать использовать сразу, является интерполяция переменной. Вы можете указать имя переменной непосредственно в f-строковом литерале (f'string'), и Python заменит имя соответствующим значением.

Например, предположим, что вы хотите отобразить результат арифметического вычисления. Это можно сделать с помощью простого print() и оператора ,, разделяющего числовые значения и строковые:
Python

>>> a = 20
>>> b = 25
>>> prod = a * b
>>> print('Произведение', a, 'на', b, 'равно', prod)
Произведение 20 на 25 равно 500
Но это громоздко. Чтобы выполнить то же самое с помощью f-строки:
  1. Напишите f или F перед кавычками строки. Это укажет Python, что это f-строка вместо стандартной.
  2. Укажите любые переменные для воспроизведения в фигурных скобках ({}).
Код с использованием f-string, приведенный ниже, выглядит намного чище:
Python

>>> a = 20
>>> b = 25
>>> prod = a * b
>>> print(f'Произведение {a} на {b} равно {prod}')
Произведение 20 на 25 равно 500

ПРАКТИЧЕСКИЙ БЛОК

One
1

Решаем задачи на строки

Мы с вами узнали, что такое строка в Python и как ее создать, также научились экранировать и форматировать строки, и главное - изучили основные методы по работе с ними. Теперь предлагаем вам попробовать ими воспользоваться, а именно - решить несколько задач вместе с нами(разбор решения в видео ниже). Список задачек:
Возможные способы решения(сразу скажем, практически у каждой задачи их несколько) смотрите в нашей видео-инструкции:
Хронометраж
00:00 План видео
01:00 Что такое строка?
05:40 Способы создания строк
07:30 Операции над строками
08:20 Общие операции
11:00 Дополнительные операции
11:25 (1) Работа с регистром
12:25 (2) Объединение и разбивка строк
14:00 (3) Поиск и замена строк
16:00 Задача 1. Интерактивный режим.
26:30 Задача 2. Интерактивный режим.
33:15 Задача 3. PyCharm.
46:10 Задача 4. PyCharm.
52:40 Задача 5. PyCharm.
Two
2

Домашнее задание

Предлагаем вам написать 2 небольших программы в качестве решения к следующим задачам:
Задача 1
Выяснить, является ли строка палиндромом.
Задача 2
Дана строка из двух слов. Поменяйте слова местами.
Делитесь возможными решениями задач в комментариях. Также предлагаем вам к рассмотрению и изучению наши варианты решений и соответствующие комментарии к каждому из заданий.
Как вам материал?

Читайте также