Найти в Дзене
programmer's notes (python and more)

Программирование на Python. Дополнение к уроку 8 (строковые переменные, методы)

Оглавление

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

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

Строковые переменные в Python. Методы

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

  • Глобальные функции. Например len() - строки, int() - преобразование строки в число (если возможно) и т.д.
  • Операторы. Например + - конкатенация (объединение) строк, * - дублирование строки.
  • Методы строк. Сегодня рассмотрим основные методы. В восьмом уроке говорилось о методе strip() - отбрасывание пробелов (и других управляющих или неотображаемых символов) слева и справа, isdigit() - проверка того, состоит строка только из цифр или нет. Кроме метода strip() есть также lstrip() и rstrip() которые отбрасывают неотображаемые символы только слева или только справа. Мы не будем их ниже описывать, поскольку они в сущности ни чем не отличаются от метода strip().

К отдельным символам в строке можно обращаться с помощью индекса.

s = "qwerty"
print(s[2])

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

e

Список методов с пояснениями

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

Начнем с методов, которые начинаются с предлога is. Они занимаются проверкой строки на предмет ее содержания.

isspace() - проверка того, состоит ли строка из неотображаемых символов. Чаще всего речь речь идет о пробелах. Но это могут быть символы табуляции, перевода строки т.д. В одном из уроков мы поговорим о таких символов. Например

s = ' '
print(s.isspace())

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

isupper(), islower() — проверяют состоит ли строка только из заглавных или только из прописных букв. При этом наличие в строке других символов не влияет на результат. Например

s = 'абвюwqwe ^12'
print(s.islower())

Результат
True

s = 'абвюwqwe ^12Н'
print(s.islower())

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

isdigit() — состоит ли строка только из цифр. Если в строке только цифры, то метод возвращает True. В видеоуроке был приведен пример. Подчеркнем, что наличие любых других символов видимых или невидимых приводит к тому, что метод возвращает False.

isalpha() — состоит ли строка только из букв (русский, латинский алфавит, а также буквы других алфавитов). Например

s = 'asdYUPвапы'
print(s.isalpha())

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

True

s= 'ǑᆶasdYUPвапы'
print(s.isalpha())

Эти строки тоже дают True

Если у вас нет первых двух символов в редакторе, то их можно вывести как \ucode, где code - код в 16-теричной кодировке, который легко можно найти в таблице символов utf-8. В Интернет таких ресурсов множество.

isalnum() - состоит ли строка только из букв и цифр. Метод возвращает True если строка состоит только букв, только из цифр, из букв и цифр.

istitle() — определяет начинаются ли слова в строке с заглавных букв. Например

s = '222 Лфывы Ghj; Ioop'
print(s.istitle())

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

True

Слово состоящее из цифр было просто проигнорировано. При этом игнорируются вообще все не алфавитные символы в начале слова (sic!). Между словами не обязательно должны быть пробелы, это могут быть другие не алфавитные символы, например знаки препинания или даже цифры. Например

s = '222 Лфывы Ghj1№Щoop'
print(s.istitle())

Результат

True

а

s = '222 Лфывы Ghj1№щoop'
print(s.istitle())

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

False

Следующая группа методов посвящена поиску в строке.

Первое я хотел бы здесь вспомнить это оператор in. Он работает для разных типов данных, в том числе и строк. С помощью него можно определить, входит ли данная строка как часть в другую строку. Пример программы см. ниже (primer12.py)

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

Четыре метода find(), index(), rfind(), rindex() используются для поиска подстроки в строке. Первые два метода осуществляют поиск слева направо, последние два - справа налево. Все методы возвращают индекс символа с которого начинается найденная подстрока. Индекс во всех четырех методах отсчитывается с начала строки. При этом если строка не найдена вообще то: find(), rfind() возвращают -1, а index(), rindex() вызывают исключения, которое можно отловить операторами try - except. Но поскольку мы этими операторами еще не занимались, то остановимся на методах find(), rfind().

В общем случае формат find() такой

s.find(s1, begin, end), где s1 - строка, которая ищется, begin - end определяют область поиска (номера символов между которыми осуществляется поиск). Если опустить end, то поиск будет осуществляться до конца строки. Если опустить и begin и end, то поиск будет осуществляться с начала строки и до ее конца. Формат вызова метода rfind() точно такой, только не будем забывать, что поиск будет осуществляться справа налево. Например

s1 = 'qwertyuioptyuz'
s2 = 'tyu'
print(s1.find(s2))
print(s1.find(s2, 5))

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

4
10

Аналогично

s1 = 'qwertyuioptyuz'
s2 = 'tyu'
print(s1.rfind(s2))
print(s1.rfind(s2, 0, 9))

Результат

10
4

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

Приведем пример программы, которая ищет все вхождения строки в другой строке.

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

4
10
21
24

count() - еще один метод, который можно отнести к поиску в строке. Метод считает сколько раз в строке встречается другая строка. Формат метода

s.count(s1, begin, end) — где s1 строка для поиска, begin-end область для поиска. Если опустить end, то поиск осуществляется до конца строки, если опустить begin и end, то поиск осуществляется по всей строке. Например

s1 = 'qwqerqwtyq'
print(s1.count('qw'))

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

2

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

split(sym) — разделение строки по разделителю. Разделитель это строка или один символ. Если разделитель не указан, то то по умолчанию берется пробел. В результате выполнения метода получается список, состоящий из частей строки. Списки мы с вами не изучали, но пример я все равно приведу. Потом он станет для вас понятнее.

s1 = 'qwertyuioptyuz'
s2 = 'tyu'
ls = s1.split(s2) # получается список
print(ls)

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

['qwer', 'iop', 'z']

Попробуйте разобраться.

replace() — заменяет в строке одну подстроку на другую. Общий формат метода

s.replace(s1, s2, mxc) - s1 - подстрока, которая ищется в строке s и меняется на строку s2. mxc - сколько замен допустимо. Если этот параметр опустить, то операция применяется ко всем вхождениям. Например

s1 = 'qwertyuioptyuz'
s2 = 'tyu'
s3 = '3'
s1 = s1.replace(s2, s3)
print(s1)

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

qwer3iop3z

И вот тут я вам напомню видеоурок. В нем я говорил, что нужно четко понимать, меняет ли метод объект или создает новый. В данном случае речь идет о строке. Происходит замена и создается новая строка. Старая при этом не меняется. Но в нашем случае мы приравниваем ей новое значения, в сущности создаем новый объект, но под старым именем. Старый же объект (строка) автоматически удаляется из памяти. Заумно, но зато правильно. ;)

upper(), lower() — преобразуют алфавитные символы в строке к верхнему или нижнему регистру. Например

s1 = 'qwertyuioptyuz'
s1 = s1.upper()
print(s1)

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

QWERTYUIOPTYUZ

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

startswith(), endswith() - эти методы проверяют начинается ли строка с указанной подстроки или заканчивается ли строка с указанной подстроки. Например

s1 = 'qwertyuioptyuz'
print(s1.startswith('qwerty'))

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

True

capitalize() — переводит первый алфавитный символ строки в верхний регистр, остальные переводит в нижний регистр.

s1 = 'папа у Васи силен в Математике'
s1 = s1.capitalize()
print(s1)

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

Папа у васи силен в математике

swapcase() - переводит букву из нижнего регистра в верхний, а из верхнего в нижний. Например

s1 = 'папа у Васи силен в Математике'
s1 = s1.swapcase()
print(s1)

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

ПАПА У вАСИ СИЛЕН В мАТЕМАТИКЕ

center() - метод центрирует строку. Формат метода
s.center(wd, s1), где wd новая ширина строки, s1 - символ заполнения. Если не указывать последний параметр, то по-умолчанию берется пробел. При этом wd должно быть больше длины строки, в противном случае никакого действия производиться не будет. Например

s1 = 'qwerty'
s1 = s1.center(14, '*')
print(s1)

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

****qwerty****

expandtabs() - метод заменяет символы табуляции на пробелы. Можно указать в качестве параметра размер табуляции в пробелах, если не указывать, то принимается, что одной табуляции соответствует 8 пробелов. Продемонстрировать работу данного метода весьма затруднительно в тексте статьи, попробуйте поупражняться с ним сами.

title() — первая буква каждого слова переводится в верхний регистр, остальные буквы переводятся в нижний. Например

s1 = 'где это Видано, где это слыхано, ПАПА решает, а вася сдает'
s1 = s1.title()
print(s1)

Результат работы программы

Где Это Видано, Где Это Слыхано, Папа Решает, А Вася Сдает

zfill(), ljust(), rjust() - группа схожих методов. zfill() - удлиняет строку согласно указанному параметру, если в этом есть необходимость. Удлинение происходит за счет нулей в начале строки. Два других метода делают сроку не меньше указанной длины, добавляя справа или слева нужное количество указанных символов. По умолчанию используется пробел. Например

s1 = 'qwerty'
s1 = s1.rjust(10, '+')
print(s1)

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

++++qwerty

Я перечислил не все методы. Методу format() будет посвящен отдельный урок. Методы partition() и rpartition() преобразуют строку в кортеж. Кортежи мы еще не изучали. Но просто приведу пример.

s1 = 'qqqqrtssssrtggg'
lk = s1.partition('rt')
print(lk)

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

('qqqq', 'rt', 'ssssrtggg')

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

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

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

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