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

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

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

>>> s = "Hello, World!"
>>> s[0]
'H'
>>> s[7:]
'World!'
>>> s[::2]
'Hlo ol!'

В приведенном примере происходит извлечение каждого второго символа. Отметим, что можно извлекать срезы с шагом и из списков.

Особенность строк по сравнению со списками заключается в их неизменяемости. В Python невозможно изменить отдельный символ или срез в строке:

>>> s[-1] = '.'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

Интерпретатор указывает, что объекты типа str не предусматривают изменения их элементов.

Если требуется изменить строку, нужно создать новую, объединив части старой строки:

>>> s = s[0:-1] + '.'
>>> s
'Hello, World.'

Здесь используется подстрока из начальной строки, которая объединяется с другой строкой. Новая строка присваивается переменной s, и предыдущее значение теряется.

Методы строк

Язык Python предоставляет множество методов для работы со строками. Посмотреть их список можно, используя команду dir(str), а подробности о каждом методе получить через help(str.имя_метода). Рассмотрим наиболее интересные из них.

Методы split() и join()

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

>>> s = input()
red blue orange white
>>> s
'red blue orange white'
>>> sl = s.split()
>>> sl
['red', 'blue', 'orange', 'white']
>>> s
'red blue orange white'

Результат использования split() можно сохранить в переменной s, посредством s = s.split(). В этом случае исходная строка исчезнет. Если вам она не нужна, то создавать дополнительную переменную не обязательно.

Метод split() также позволяет указать строку-разделитель, по которой будет происходить разделение:

>>> s.split('e')
['r', 'd blu', ' orang', ' whit', '']
>>> '40030023'.split('00')
['4', '3', '23']

Метод join() применяется для обратного действия — объединения элементов списка в строку. Так как это метод строки, строка-разделитель указывается перед вызовом метода, а список следует заключить в скобки:

>>> '-'.join(sl)
'red-blue-orange-white'

Если разделитель не нужен, используется пустая строка:

>>> ''.join(sl)
'redblueorangewhite'
Методы find() и replace()

Эти методы работают с подстроками. Метод find() используется для поиска подстроки в строке, возвращая индекс её первого символа. Если подстрока отсутствует, возвращается -1.

>>> s
'red blue orange white'
>>> s.find('blue')
4
>>> s.find('green')
-1

Поиск можно ограничить заданным интервалом строки, указав начальный и конечный индексы. Если конечный индекс не указан, поиск продолжается до конца строки:

>>> letters = 'ABCDACFDA'
>>> letters.find('A', 3)
4
>>> letters.find('DA', 0, 6)
3

Здесь поиск производится начиная с третьего индекса и до конца строки, а также с нулевого до шестого. Обратите внимание: find() возвращает только первое вхождение. Метод letters.find('A', 3) не находит последний 'A', так как до него уже встретился 'A' на позиции 4.

Метод replace() заменяет одну подстроку другой:

>>> letters.replace('DA', 'NET')
'ABCNETCFNET'

Исходная строка не изменяется:

>>> letters
'ABCDACFDA'

Для сохранения результата необходимо присвоить его новой переменной:

>>> new_letters = letters.replace('DA', 'NET')
>>> new_letters
'ABCNETCFNET'
Метод format()

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

>>> print("This is a {0}. It's {1}.".format("ball", "red"))
This is a ball. It's red.

Метод предоставляет множество возможностей, остановимся на основных:

>>> size1 = "length - {}, width - {}, height - {}"
>>> size1.format(3, 6, 2.3)
'length - 3, width - 6, height — 2.3'

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

>>> size2 = "height - {2}, length - {0}, width - {1}"
>>> size2.format(3, 6, 2.3)
'height - 2.3, length - 3, width - 6'

Также возможно использование слов-ключей для аргументов:

>>> info = "This is a {subj}. It's {prop}."
>>> info.format(subj="table", prop="small")
"This is a table. It's small."

И пример форматирования вещественных чисел:

>>> "{1:.2f} {0:.3f}".format(3.33333, 10/6)
'1.67 3.333'

Практическая работа

  1. Вводится строка, содержащая как строчные, так и заглавные буквы. Требуется преобразовать её так, чтобы строчные буквы стали заглавными, а заглавные — строчными. К примеру, исходная строка "aB!cDEf" преобразуется в "Ab!CdeF". Для этого можно использовать цикл for, строковые методы upper() и lower(), а также isupper() и islower() для проверки регистра.
  2. Метод isdigit() позволяет проверить, состоит ли строка исключительно из цифр. Напишите программу, запрашивающую ввод двух целых чисел для последующего отображения их суммы. При вводе некорректных данных программа должна продолжать запрашивать ввод, не завершаясь с ошибкой. Использование обработчика исключений try-except не допускается.

Вопросы для самопроверки:

  1. Что такое строка в Python и как она может быть определена в коде?
  2. Какой метод используется для разбивания строки на элементы, и как можно указать строку-разделитель для этого метода?
  3. Что произойдет, если попробовать изменить отдельный символ в строке в Python?
  4. Как метод find() работает в строках и что возвращает, если подстрока отсутствует?
  5. Для чего используется метод replace() и что нужно сделать, чтобы сохранить изменения в строке?
  6. Какие методы строк применимы для преобразования регистра символов?
  7. Как проверить, является ли строка полностью цифровой без использования try-except?

Программа курса:

  1. Описание курса
  2. Эволюция и основы языков программирования

    История программирования в кратком и понятном изложении. Что такое машинный язык, почему появились ассемблеры, языки высокого уровня и объектно-ориентированные. Зачем нужен транслятор, и почему он может быть либо компилятором, либо интерпретатором.

  3. Знакомство с основами Python

    Особенности языка Python, работа в интерактивном режиме и подготовка файлов с исходным кодом.

  4. Типы данных и переменные в Python

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

  5. Ввод и вывод данных с Python функциями

    Для вывода на экран в Python 3.x используется функция print(). Вывод может быть предварительно отформатирован. Для ввода данных с клавиатуры используется функция input(), которая возвращает в программу строку.

  6. Логические выражения и операторы в Python

    Логические выражения. Логические операторы языка Python: == (равно), != (не равно), (больше), = (больше или равно), and (логическое И), or (логическое ИЛИ), not (отрицание).

  7. Ветвление и условные операторы в Python

    Управление потоком программы с помощью операторов if-else. Создание логических ветвлений, обработка условий и выполнение разных блоков кода в Python.

  8. Изучите обработку ошибок и исключений в Python

    Общее представление об ошибках и исключениях в языке программирования Python. SyntaxError, NameError, TypeError, ValueError, ZeroDivisionError. Обработка исключений с помощью инструкции try-except.

  9. Множественное ветвление с if-elif-else в Python

    Оператор множественного ветвления языка Python позволяет организовать более двух веток выполнения программы без необходимости вложения условных операторов друг в друга. Конструкция включает одну ветку if, произвольное количество elif и необязательную ветку else.

  10. Цикл while и его применение в Python

    С помощью циклов в программировании организуется многократное следующее друг за другом выполнение одних и тех же участков кода. Бывают циклы с условием и со счетчиком. К первым относится цикл while, или цикл "пока".

  11. Изучите функции и их применение в Python

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

  12. Локальные и глобальные переменные в Python

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

  13. Оператор return и возврат значений в Python

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

  14. Параметры и аргументы функций в Python

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

  15. Встроенные функции Python для работы

    Язык программирования Python включает множество встроенных функций. В предыдущих уроках мы использовали такие функции как print() и input(), а также функции преобразования типов данных. В этом уроке рассматриваются встроенные функции для работы с символами и числами.

  16. Использование модулей в Python

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

  17. Генерация псевдослучайных чисел в Python

    Для генерации псевдослучайных чисел в языке программирования Python используются функции модуля random. Функция random() генерирует вещественное число от 0 до 1. Функции randint() и randrange() производят целые псевдослучайные числа в указанных диапазонах.

  18. Изучение списков в Python - основы и операции

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

  19. Изучение цикла for в Python

    Цикл for в языке программирования Python предназначен для перебора элементов структур данных (списков, словарей, кортежей, множеств) и многих других объектов. Это не цикл со счетчиком, каковым является for во многих других языках. Нередко цикл for используется совместно с функцией range(), генерирующей объекты-диапазоны.

  20. Строки в Python - методы и срезы

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

  21. Кортежи - неизменяемые структуры данных

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

  22. Словари в Python - работа с ключами и значениями

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

  23. Работа с файлами в Python

    В языке программирования Python открытие файлов выполняется с помощью функции open(), которой передается два аргумента - имя файла и режим. Файл может быть открыт в режиме чтения, записи, добавления. Также может быть указан тип файла - текстовый или бинарный. Для файлов есть ряд встроенных методов чтения, записи и др.