Python

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}")

Вот пример выполнения программы:

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