Освой Python играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
format
F-strings: новый способ форматирования
Байтовые строки
В Python строки относятся к классу str вместо привычных String в других языках. Полный список методов класса можно узнать через команду:
print(str)
Строки можно обрамлять одинарными или двойными кавычками. Два варианта позволяют вставлять в литералы строк символы кавычек или апострофов, не используя экранирование. В обычных случаях проще использовать одинарные кавычки, которые проще набрать с клавиатуры без использования клавиши Shift.
print("Мурзик")
print('Барсик')
print('Рыжик любил полежать на крыше автомобиля "Жигули"')
Экранированные последовательности позволяют вставить служебные символы, как и во многих языках программирования. Если перед открывающей кавычкой стоит символ r (в любом регистре), то механизм экранирования отключается. Но следите за тем, чтобы строка не заканчивалась на символ обратного слеша, иначе потребуется дополнительная обработка.
print("Мурзик\t5 лет") # табуляция
print('Рыжик любил полежать \nна крыше автомобиля "Жигули"') # перевод строки
print(r'D:\cats.txt') # отключение экранирования
Для многострочного текста можно использовать тройные кавычки или апострофы. Внутри строки возможно наличие кавычек и апострофов, но они не должные встречаться три раза подряд.
pushkin = """У лукоморья дуб зелёный;
Златая цепь на дубе том:
И днём и ночью кот учёный
Всё ходит по цепи кругом;
Идёт направо - песнь заводит,
Налево - сказку говорит."""
print(pushkin)
Длину строки можно узнать через метод len().
str = "cat"
print(len(str)) # 3
Склейка двух строк (concatinate) происходит очень просто через сложение.
str1 = "Hello"
str2 = "Kitty"
concat = str1 + " " + str2
print(concat)
Разбить строку по указанному разделителю можно через функцию split(). По умолчанию в качестве разделителя используется пробел.
terminator = "I\'ll be back."
list = terminator.split()
print(list[0]) # I'll
Укажем разделитель явно.
myString = "one|two|three"
list = myString.split("|")
print(list[1])
Можно указать количество учитываемых разделителей.
myString = "one|two|three"
list = myString.split("|", 1)
print(list[1]) # two|three
Довольно неожиданный оператор, который не встречал в других языках. Оказывается, строку можно "умножить". На самом деле, оператор позволяет повторить строку указанное число раз.
str = "cat"
repeatedStr = str * 3
print(repeatedStr)
Доступ к отдельному символу можно получить по индексу.
cat = "кот"
print(cat[0])
print(cat[1])
print(cat[2])
Можно указывать отрицательные значения, тогда отсчёт пойдёт с конца строки, начиная с -1.
cat = "кот"
print(cat[-1]) # т
print(cat[-2]) # о
print(cat[-3]) # к
Можно получить срез строки, указав начало индекса и конец, который не входит в срез.
cat = "скотина"
print(cat[1:4]) # кот
Возможные другие варианты среза. Смотрите примеры.
cat = "скотина"
print(cat[1:-3]) # кот
print(cat[:4]) # скот
print(cat[3:]) # тина
print(cat[:]) # скотина
Можно задать шаг, с которым нужно извлекать срез.
cat = "скотина"
print(cat[::-1]) # анитокс
print(cat[1:6:2]) # ктн
print(cat[2::2]) # оиа
Для удаления символов новой строки в конце строки можно использовать метод rstrip("\r\n") без удаления конечных пробелов:
>>> lines = ("line 1 \r\n"
... "\r\n"
... "\r\n")
>>> lines.rstrip("\r\n")
'line 1 '
Также есть всевозможные функции перевода в верхний/нижний регистр, проверок на наличие цифр и т.п.
Мощная функция с большими возможностями для форматирования строк.
Если для подстановки требуется только один аргумент, то значение - сам аргумент:
print('Hello, {} !'.format('Kitty'))
Другие варианты.
print('{1}, {0}, {2}'.format('Кошка', 'Кот', 'Котёнок')) # Кот, Кошка, Котёнок
print('{}, {}, {}'.format('Кошка', 'Кот', 'Котёнок')) # Кошка, Кот, Котёнок
На самом деле функцию следует изучить по документации, слишком много вариантов.
Во всех примерах мы использовали функцию print() с параметрами по умолчанию. В частности, строка завершается символом перевода строки. Если мы не хотим добавлять этот символ в нашу строку, то используем именованный аргумент end с указанием нужного символа.
print('Барсик')
print('Мурзик', end='')
print('Васька')
# Результат
Барсик
МурзикВаська
Всё же format() не слишком читабелен и удобен при большом количестве параметров. Гораздо приятнее использовать новый способ. Нужно всего лишь подставить символ f перед кавычками и затем просто подставлять имена переменных в фигурных скобках.
catName = 'Рыжик'
age = 7
print(f"Моего кота зовут {catName}, ему {age} лет")
Байтовые строки очень похожи на обычные строки, но с небольшими отличиями.
Создадим байтовую строку.
b'bytes'
# b'bytes'
'Байты'.encode('utf-8')
# b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b'
bytes('bytes', encoding = 'utf-8')
# b'bytes'
bytes([50, 100, 76, 72, 41]) # числам от 0 до 255 соответствуют символы как у chr()
# b'2dLH)'
Байтовые строки используют для записи в файл или чтения из него.
Для преобразования в обычную строку используют метод decode().
b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b'.decode('utf-8')
# 'Байты'