С чего необходимо начинать говорить о строках.

Строка — это неизменяемая упорядоченная последовательность символов.

В Python нет типа char(символ), поэтому можно считать, что символ — это строка длиной 1. Определение получается не формальным (замкнутым само на себя), тем не менее этого достаточно для понимания строк.

Лайфхак от Happy Python #1

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

Необходимо знать три составляющие:

  • Изменяемая/неизменяемая?
  • Упорядоченная/неупорядоченная?
  • Тип содержащихся элементов?

Ответив на три тих вопроса, мы даем определение любой коллекции.
Пример:

Строка — неизменяемая, упорядоченная, содержит символы.

Список — изменяемый, упорядоченный, содержит любые элементы.

Словарь — изменяемый, упорядоченный, содержит пары ключ: значение.

и т.д.

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

Есть несколько способов ввода строк:

  • Одиночные кавычки: 'string'.
  • Двойные кавычки: "string".
  • Многострочный ввод. Для ввода строк используется очень редко, но может. Обычно таким образом формируют докстринги.
"""
multistring или докстринг
"""

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

# Строка, содержащая двойные кавычки.
s = 'st"ring'

Некоторые символы не могут быть введены с клавиатуры. Для этого применяется экранирование:

  • ‘\n’ — перевод строки.
  • ‘\r’ — возврат каретки.
  • ‘\t` — горизонтальная табуляция. и т.д.

Кроме того, с помощью бэк-слеша вводятся символы по коду.

Типы строк в Python 3

  • Unicode строки, задаются как описано выше.
  • Бинарные строки: b'str' — элементами этой строки являются байты а не символы.
  • Строка с подавлением экранирования. Бэк-слеш как символ экранирования работать не будет. r's\t'. Во втором Python 2 строки по умолчанию были в кодировке ASCII, а для задания unicode строки необходимо было указывать это явно: u'unicode_str'.
  • Форматированные строковые литералы. f'str{var_name}'.
a = 'happy'
b = """happy"""
print(a == b)
print(a is b)

True
True

Базовые методы работы со строками

Со строками можно произвести следующие базовые операции:

  • Строку можно присвоить переменной. s = '10'.
  • Получение символа по индексу. Индексация начинается с 0. a[0] — первый символ. Индексы могут быть и отрицательными. -1 — последний элемент, и далее влево с уменьшением индекса.
  • Получение длины строки. len(s).
  • Конкатенация(сложение) строк. s1+s1.
  • Умножение строки на число.
  • Брать срезы.

Срезы

Синтаксис среза:

str_[start:end:step]

Срез(slice) возвращает подстроку, от значения start до значения end не включая end с шагом step. В случае, если шаг отрицательный, start должен быть больше end. Индексы start и end могут быть отрицательными. В случае если нужно использовать значения по умолчанию — взять с начала, или до конца, или с шагом 1, явно эти значения можно не указывать.

Методы строк

  • my_string.lower() — возвращает копию строки, преобразованную к нижнему регистру.
  • my_string.upper() — возвращает копию строки, преобразованную к верхнему регистру.
  • my_string.find('substr’) — возвращает индекс первого вхождения подстроки в строку.
  • my_string.strip([chars]) — удаление пробельных символов (или chars) в начале и конце строки.
  • my_string.split([str]) — разбиение строки по пробельным символам (или str).
  • my_string.replace(old, new, [maxcount]) — возвращает строку, в котрой заменены все вхождения (или maxcount) указанной строки соответствующим значением.
  • my_string.join(iterable) — собирает строку из элементов iterable c разделителем my_string. Элементы итерируемого объекта должны быть строками.

Встроенные функции работы со строками

  • ord(chr) — возвращает код символа chr.
  • chr(int) — возвращает символ по коду int.

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

Современный стиль

  • "string{}{}".format(arg1, arg2) — форматирование с позиционными аргументами, идущими по очереди.
  • "string{0}{1}".format(arg1, arg2) — форматирование с передачей позиционных аргументов, с указанием куда какой аргумент пойдет.
  • string{a}{b}".format(a=arg1, b=arg2) — форматирование с передачей параметров по имени.

Устаревший стиль

C-like механизм.

'string %s%d%r' % (obj, num, obj_) — переменные подставляются вместо соответствующих операторов, начинающихся с %%s — строчное представление, %d — числа, %r — текстовое представление в виде repr (об этом мы узнаем позже когда будет проходить классы).

В целом этот метод форматирования устарел и используется редко.

F-string

Данный тип форматирования был введен в версии Python 3.6.

var = 10
str_ = f'my val = {var}'

Производит автоподстановку значений переменных в строку по имени.

Задачи для закрепления

  1. Базовые операции со строками.

Вводится строка. Удалить из нее все пробелы, после этого определить, является ли она палиндромом, т.е. одинаково пишется как с начала так и с конца.

  1. Базовые операции со строками.

Найти самое длинное слово в введенном предложении

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

Уравнение прямой вида y = kx + b задано в виде строки. Определить координату y точки с заданной координатой x.

  1. Join.

Заменить все пробелы в строке на точки не используя replace.

  1. Срезы.

Дана строка.

  • Сначала выведите третий символ этой строки.
  • Во второй строке выведите предпоследний символ этой строки.
  • В третьей строке выведите первые пять символов этой строки.
  • В четвертой строке выведите всю строку, кроме последних двух символов.
  • В пятой строке выведите все символы с четными индексами (считая, что индексация начинается с 0, поэтому символы выводятся начиная с первого).
  • В шестой строке выведите все символы с нечетными индексами, то есть начиная со второго символа строки.
  • В седьмой строке выведите все символы в обратном порядке.
  • В восьмой строке выведите все символы строки через один в обратном порядке, начиная с последнего.
  • В девятой строке выведите длину данной строки.
  1. Форматирование строк.

Вводится дата в формате dd.mm.yyyy Вывести дату в формате mm\dd\yyyy