Python. Все о строках.
Строки – один из самых важных и часто используемых типов данных в Python. Они представляют собой последовательность символов и используются для работы с текстовой информацией. Python предоставляет богатый набор встроенных методов и функций для работы со строками, таких как поиск, замена, форматирование, разделение и объединение. Если вы уже работали со строками в других языках, то заметите, что Python предлагает уникальные подходы, которые отличают его от остальных. Например, в Python обработка строк часто выполняется с помощью лаконичных и выразительных методов, что делает код более читаемым и компактным.
Основы
Чтобы объявить строку в python, нужно заключить текст в одинарные или двойные кавычки:
s1 = 'Python is cool'
s2 = "Python is cool"
Если внутри строки используется кавычка, ее нужно экранировать с помощью символа косой черты:
'Я – Д\'Артаньян!!!'
Либо можно заключить всю строку в тройные кавычки. В этом случае экранирование не требуется, а также появляется возможность использовать переносы строк:
multiline_string = '''Я – Д'Артаньян!!!
- сказал всадник'''
Со строками можно использовать операторы + и *. Оператор + склеивает две строки:
"Раз" + " " + "Два" # "Раз Два"
Операция * повторяет строку указанное количество раз:
"Раз" * 3 # "РазРазРаз"
С помощью оператора in можно определить, входит ли одна строка в другую:
"раз" in "три два раз" # True
"ДВА" in "три два раз" # False – проверка выполняется с учетом регистра
Строка – последовательность символов
По сути, строка – это последовательность символов. Чтобы определить количество символов в строке, можно воспользоваться функцией len:
string_length = len("Python is cool")
print(string_length) # Выводит 14
К символам строки можно обращаться по их индексу. Отсчет начинается с 0:
s = "Python is cool"
print(s[2]) # Выводит символ t
Если указать отрицательный индекс, то отсчет символов будет с конца строки. Последний символ имеет индекс -1:
s = "Python is cool"
print(s[-4]) # Выводит символ c
По строке можно итерироваться:
s = "abcdef"
for ch in s:
print(ch)
Результатом выполнения будет вывод символов a, b, c, d, e и f. Каждый символ в новой строке.
Можно получить подстроку с помощью среза (slice):
s = "Иванов Иван Иванович"
print(s[7:11]) # Выводит строку "Иван"
Здесь 7 – это индекс начала среза, а 11 – индекс конца среза, причем символ с этим индексом уже не попадает в результат.
Если опущен первый индекс, срез берется от начала строки. А если опущен второй индекс, срез берется до конца строки.
s = "Иванов Иван Иванович"
print(s[:6]) # Выводит строку "Иванов"
print(s[12:]) # Выводит строку "Иванович"
print(s[:]) # Выводит строку "Иванов Иван Иванович"
В срезах также можно использовать индексы с отрицательным значением:
s = "Иванов Иван Иванович"
print(s[-8:]) # Выводит строку "Иванович"
Можно указать шаг, с которым будут браться символы.
s = "abcdef12345"
print(s[1:9:2]) # Выводит bdf2
Шаг может быть отрицательным.
s = "abcdef12345"
print(s[9:1:-2]) # Выводит 42fd
print(s[::-1]) # Выводит 54321fedcba
Строки являются неизменяемыми, поэтому заменить символ в строке нельзя. Но можно создать новую строку:
s = "abcdef"
# s[1] = "x" – так нельзя, будет ошибка
s1 = s[:1] + "x" + s[2:] # в s1 попадет строка axcdef
Методы строк
Давайте рассмотрим некоторые методы, доступные для строк:
capitalize()– возвращает строку, где первый символ в верхнем регистре, а остальные в нижнем.swapcase()– возвращает строку, в которой регистр всех символов изменен на противоположный.title()– возвращает строку, где каждое слово начинается с заглавной буквы.lower()– возвращает строку, в которой все символы в нижнем регистре.upper()– возвращает строку, в которой все символы в верхнем регистре.count(sub)– возвращает количество непересекающихся вхождений подстрокиsubв строке.startswith(prefix)– возвращаетTrue, если строка начинается сprefix, иначеFalse.endswith(suffix)– возвращаетTrue, если строка заканчивается наsuffix, иначеFalse.find(sub)– возвращает индекс первого вхождения подстрокиsubили -1, если подстрока не найдена.rfind(sub)– возвращает индекс последнего вхождения подстрокиsubили -1, если подстрока не найдена.index(sub)– аналогиченfind(), но вызывает ошибкуValueError, если подстрока не найдена.rindex(sub)– аналогиченrfind(), но вызывает ошибкуValueError, если подстрока не найдена.strip()– удаляет пробельные символы (или другие указанные символы) с начала и конца строки.lstrip()– удаляет пробельные символы только с начала строки.rstrip()– удаляет пробельные символы только с конца строки.replace(old, new)– возвращает строку, в которой все вхожденияoldзаменены наnew.isalnum()– возвращаетTrue, если строка состоит только из букв и цифр, иначеFalse.isdigit()– возвращаетTrue, если строка состоит только из цифр, иначеFalse.islower()– возвращаетTrue, если все символы строки в нижнем регистре, иначеFalse.isupper()– возвращаетTrue, если все символы строки в верхнем регистре, иначеFalse.isspace()– возвращаетTrue, если строка состоит только из пробельных символов, иначеFalse.
А вот примеры использования приведенных выше методов:
s = "hello world"
print(s.capitalize()) # Выводит "Hello world"
s = "Hello World"
print(s.swapcase()) # Выводит "hELLO wORLD"
s = "hello world"
print(s.title()) # Выводит "Hello World"
s = "HELLO WORLD"
print(s.lower()) # Выводит "hello world"
s = "hello world"
print(s.upper()) # Выводит "HELLO WORLD"
s = "hello world"
print(s.count('l')) # Выводит 3
s = "hello world"
print(s.startswith('hello')) # Выводит True
s = "hello world"
print(s.endswith('world')) # Выводит True
s = "hello world"
print(s.find('world')) # Выводит 6
s = "hello world world"
print(s.rfind('world')) # Выводит 12
s = "hello world"
print(s.index('world')) # Выводит 6
s = "hello world world"
print(s.rindex('world')) # Выводит 12
s = " hello world "
print(s.strip()) # Выводит "hello world"
s = " hello world "
print(s.lstrip()) # Выводит "hello world "
s = " hello world "
print(s.rstrip()) # Выводит " hello world"
s = "hello world"
print(s.replace('world', 'Python')) # Выводит "hello Python"
s = "hello123"
print(s.isalnum()) # Выводит True
s = "12345"
print(s.isdigit()) # Выводит True
s = "hello world"
print(s.islower()) # Выводит True
s = "HELLO WORLD"
print(s.isupper()) # Выводит True
s = " "
print(s.isspace()) # Выводит True
Форматирование строк
Для форматирования строк в Python используется метод format. Он позволяет вставлять значения в строку, заменяя плейсхолдеры на указанные аргументы:
hello = "My name is {0}, I am from {1}".format("John", "Moscow")
В переменной hello будет текст "My name is John, I am from Moscow". В фигурных скобках указывается индекс аргумента метода format, который будет использоваться для подстановки.
Еще один способ формирования строк – это f-строки. Они позволяют удобным способом встроить выражения прямо в строку.
name = "Alice"
age = 25
print(f"{name} is {age} years old.") # Выводит "Alice is 25 years old."
F-строки начинаются с префикса f, а выражения заключаются в фигурные скобки. С их помощью получается более читабельный и компактный код по сравнению с методом format.
Таблица символов Unicode
Благодаря поддержке Unicode, строки в Python могут содержать символы практически любого языка мира, что делает его универсальным инструментом для разработки международных приложений. Для работы с таблицей символов Unicode используются функции ord и chr.
Получить код символа в таблице символов Unicode:
ord("W") # Выводит 87
Получить символ по его коду в таблице символов Unicode:
chr(71) # Выводит G
Соответствие символов и их кодов можно найти например на этой странице – https://symbl.cc/ru/unicode-table/.
Сравнение строк
Строки можно сравнивать с помощью операторов ==, !=, <, <=, >, >=. В отличие от чисел, сравнение строк происходит на основе лексикографического порядка – в соответствии с кодами составляющих им символов в таблице Unicode.
print("Meow" < " meeeeeooow ") # False
print("meow" < "meeeeeooow") # True
print("Hello" == "hello") # False
print("10" > "9") # False
Практика
А теперь закрепим материал на практической задаче. Напишем программу “Трансформатор имен”. Она запрашивает имя пользователя и выводит 3 трансформированных варианта – зеркальный, легендарный и роботизированный.
name = input("Введи свое имя: ").strip()
Здесь мы просим пользователя ввести имя. Также сразу удаляем пробельные символы с начала и конца введенной строки.
mirror_name = name[::-1].title()
Получаем зеркальное имя. То есть все символы имени будут идти в обратном порядке. И первую букву имени делаем большой.
Чтобы получить легендарное имя, удвоим согласные буквы и добавим суффикс. Если длина имени больше 4 символов – добавим суффикс “Великий”, а если нет – “Младший”.
# перечислим все согласные буквы русского и английского алфавитаletters = "bcdfghjklmnpqrstvwxyz" + "бвгджзйклмнпрстфхцчшщ"
letters += letters.upper() # и добавим еще большие согласные буквы
legendary_name = ""
for ch in name: # перебираем все символы имени
if ch in letters: # проверяем, согласная ли это буква
legendary_name += ch * 2 # удваиваем
else:
legendary_name += ch # добавляем как есть
if len(name) > 4: # добавляем суффикс в зависимости от длины исходного имени
legendary_name += " Великий"
else:
legendary_name += " Младший"
legendary_name = legendary_name.title()
Для роботизированного имени заменим некоторые гласные буквы на цифры. Плюс добавим робо-суффикс 😊
robot_name = ""
for ch in name: # учитываем большую и маленькую буквы русского или английского алфавита
if ch in "aAаА":
robot_name += "4"
elif ch in "eEеЕ":
robot_name += "3"
elif ch in "iI":
robot_name += "1"
elif ch in "oOоО":
robot_name += "0"
elif ch in "sS":
robot_name += "5"
else:
robot_name += ch
robot_name += "-XJ9"
robot_name = robot_name.title()
И теперь остается вывести результат.
print("Результаты трансформации:")
print(f"1. Зеркальное: {mirror_name}")
print(f"2. Легендарное: {legendary_name}")
print(f"3. Робот: {robot_name}")
Вот пример выполнения программы:

На этом все и спасибо, что дочитали до конца!