Найти тему
programmer's notes (python and more)

Программирование на языке Python. Префиксы строк (приложение 2 к уроку 9)

Оглавление

Доброго времени суток, читатели, зрители моего канала programmer's notes.

Данная статья это второе приложение к уроку 9.

Префиксы строк в языке программирования Python

Во второй части видео-урока 9, я рассказывал о том, что строки в Python могут содержать префикс, который меняет их свойство. Беспрефиксный вариант строк я рассмотрел в предыдущем статье

Префикс r

Данный префикс отменяет экранированные последовательности. Если в строке присутствуют символы обратны слеш, а вам необходимо вывести строку, как есть, то смело используйте данный префикс.

s = 'c:\windows\system\sys\arh\tr.sys'
ss = r'c:\windows\system\sys\arh\tr.sys'
print(s)
print(ss)

Результат выполнения данных строк

c:\windows\system\sysrh r.sys
c:\windows\system\sys\arh\tr.sys

Как видим особенно это удобно, если работаете с файлами в операционной системе Windows.

Отметим только, обратный слеш не может быть последним символом. Если все таки вам нужно вывести строку с обратным слешем в конце, используйте операцию конкатенации.

s = r'c:\windows\system\sys\arh\tr.sys' + '\\'

либо просто использовать известное уже нам экранирование

s = 'c:\\windows\\system\\sys\\arh\\tr.sys\\'

Префикс b

Данный префикс превращает строку в последовательность байтов. Использование этого префикса предполагает, что строка состоит из символов с кодом от 0 до 255 (ASCII символов). При этом символы с кодами от 0 до 127 могут быть представлены обычными символами, а остальные с помощью префикса \x. Чтобы было понятно приведем пример

s = b'abc\xbb'
print(s[0])
print(s[1])
print(s[2])
print(s[3])

Результат выполнения фрагмента

97
98
99
187

Как видим, мы фактически получили массив байтов. 187 это разумеется в шестнадцатеричном представлении bb.

Впрочем это пока выходит за рамки нашего рассмотрения. К байтам мы еще вернемся, когда будем рассматривать файлы.

Можно использовать комбинированный префикс br, тогда экранирование не включается, а каждый символ интерпретируется как байт.

Префикс f (или f-строки)

С помощью префикса f можно встраивать внутри строки выражения. Выражения могут быть и числовыми и строковыми. Вообще это очень гибкий инструмент, я расскажу только некоторые его возможности.

a = 345
b = 4532
s = f"Произведение {a} и {b} равно {a * b}"
print(s)

Результат работы строк будет

Произведение 345 и 4532 равно 1563540

Как видим, с помощью f-строк можно очень компактно встраивать различные выражения в строку.

Механизм f-строк может справляться с самыми разными форматами

a = 10
s = f"Корень квадратный из {a} равен {a ** 0.5:.5f}"
print(s)

Результат

Корень квадратный из 10 равен 3.16228

С помощью f-строки мы не просто вывели результат действия, но и указали точность вывода в 5 знаков после точки (выражение после двоеточия).

Аналогично можно работать со строками.

a = 'qwertyui'
s = f"Строка {a} в верхнем регистре {'(' + a.upper() + ')'}"
print(s)

Результат выполнения фрагмента

Строка qwertyui в верхнем регистре (QWERTYUI)

f-строки другими разными возможностями, могут работать со списками, словарями и другими структурами. Очень советую поупражняться с ними, этим вы сможете сделать ваши программы компактными и эффективными. А я буду время от времени обращаться к f-строкам, по мере изложения нового материала.

Кроме того, вы можете использовать префикс fr, чтобы использовать возможности f-строк, но запретить экранирование.

Глобальные функции chr() и ord()

Говоря о строках невозможно не упомянуть две глобальные функции ord() и chr(). Первая функция возвращает код символа. Ее аргументом является строка длиной в единицу. Если строка имеет большую длину, то возникает ошибка и программа прерывается. Подобные ошибки перехватываются операторами try-except. Об этом мы будем говорить в другом цикле. Функция chr() получает код символа utf-8 и возвращает символ - строку, состоящую из одного символа. Код может находится в промежутке [0, 1114111]. Если аргумент попадает вне указанного промежутка возникает ошибка, которая также может быть перехвачена try-except.

s = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
for c in s:
print(ord(c), end=' ')
print()

Результат выполнения программы

1040 1041 1042 1043 1044 1045 1025 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071

Обращаю внимание, буква 'Ё' имеет код, выпадающий из общего ряда.

s = ''
for i in range(65, 91):
s = s + chr(i)
print(s)

Результат выполнения программы

ABCDEFGHIJKLMNOPQRSTUVWXYZ

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

print('qwerty' == 'qwerty')

Результат

True

А вот что означает, что одна строка больше другой - это интересный вопрос.

Сравнение двух строк происходит посимвольно. При этом символ больше другого символа, если его код больше.

Рассмотрим разные варианты.

print('zwerty' > 'qzerty')

Результат

True

Почему первая строка больше второй? Потому что первый символ первой строки больше первого символа второй строки. А дальше проверка не производится. Что там со вторым символами уже не важно. При этом первая строка может вообще состоять из одного символа (т.е. длины разные), все равно она будет больше второй.

print('z' > 'qzerty')

Результат

True

Если первые символы совпадают, то сравниваются вторые, результат получается по той же схеме. И так сравнение осуществляется до тех пор, пока или ни встретятся разные символы и тогда работает описанный выше алгоритм. Либо одна строка оказывается короче второй. В этом случае длинная строка будет больше короткой.

print('qwerty' > 'qwert')

Результат

True

И последний пример

print('qwerty' > 'qwerz')

Результат

False

Многострочная строка

Здесь мы выйдем за материал урока дополнив его вопросом о многострочной строке. Вводить текст в виде длинной сплошной строки часто очень не удобно. В Python есть возможность вводить строку в виде отдельных строк.

Многострочная строка с помощью обратного слеш

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

s = 'Здравствуйте! \
Добрый день! \
До свидания'
print(s)

Результат выполнения

Здравствуйте! Добрый день! До свидания

Пробел перед слеш сделан нами, чтобы отделить одну фразу от другой.

Многострочная строка с помощью скобок

Строку можно делить с помощью скобок:

s = ('Здравствуйте! '
'Добрый день! '
'До свидания')
print(s)

Результат выполнения, аналогичный, предыдущему. Для отделения одной фразы от другой мы оствили пробел перед кавычкой.

Многострочная строка с помощью тройных кавычек

Наконец строку можно поделить на подстроки (строки текста) с помощью тройных кавычек

s = '''Здравствуйте!
Добрый день!
До свидания!'''
print(s)

Результат выполнения

Здравствуйте!
Добрый день!
До свидания!

И вот тут важно отметить, что перед каждым фрагментом строки автоматически был поставлен символ перевода строки.

Всего наилучшего!

Рекомендую также посмотреть статью

Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Загадка для меня в том, что спустя много лет я по-прежнему получаю удовольствие от программирования
Загадка для меня в том, что спустя много лет я по-прежнему получаю удовольствие от программирования

#программирование #программисты #языки программирования #python