Урок 5 из 84 · Основы Python

Строки и методы строк

Содержание урока

Строки (strings, тип данных “str”) – фрагменты (кусочки) текста или последовательность символов

Строки в питоне могут быть созданы с помощью одинарных, двойных и тройных кавычек.
Например:

name = "John"   #  двойные кавычки
surname = 'Nash'  #  используем одинарные кавычки
bio = """
John Nash is a talented Python developer.
He works at Google.
"""

print(bio)

"""
Мы получим следующее:

John Nash is a talented Python developer.
He works at Google.

"""

# c помощью встроенной функции  type узнаем тип
print(type(name))
"""
Мы получим следующее:

<class 'str'>

Тоесть, значение в переменной относится к классу  str (string)
"""

Тройные кавычки в переменной означают такие строки, которые сохраняют свой вид написания. Тоесть, как вы напишите внутри, так оно и будет выводиться. Не путайте с многострочными комментариями. Комментарии пишутся вне переменных.

Рассмотрим следующий пример:

sentence = 'John is a software engineer. He's a python developer'
print(sentence)

File "<stdin>", line 1
    sentence = 'John is a software engineer. He's a python developer'
                                                ^
SyntaxError: invalid syntax

Программа вываливает нам синтаксическую ошибку SyntaxError. Дело в том, что после слова He мы поставили такую же одинарную кавычку от сокращенного слова He is. Но интерпретатор думает, что в этом месте мы закончили строку и не понимает код дальше. Чтобы избежать таких случаев, обычно мы используем 2 способа:

#  ставим \ перед символом
sentence = 'John is a software engineer. He\'s a python developer'

# или для создания строки используем двойные кавычки
# а для сокращения одинарные
sentence =  "John is a software engineer. He's a python developer"

Форматирование строк

  • метод .format()

    ```python name = 'John' surname = 'Nash' company = 'Google' bio = """ {0} {1} is a talented Python developer. He works at {2}. """.format(name, surname, company)

    print(bio) """ Мы получим следующее:

    John Nash is a talented Python developer. He works at Google.

    """ ```

  • c помощью f string (Python 3.6+)

    ```python name = 'John' surname = 'Nash' company = 'Google' bio = f"{name} {surname} is a talented Python developer.\nHe works at {company}."

    print(bio) """ Мы получим следующее:

    John Nash is a talented Python developer. He works at Google.

    """ ```

    \n - означает перенос на новую строку

Конкантенация

Конкантенация - это склеивание строк через оператор +

bio = "John" + " Nash" + " is a talented Python developer.\nHe works at " + "Google"
#  обратите внимание на пробелы. Пробел для питона считается отдельным символом

print(bio)
"""
Мы получим следующее:

John Nash is a talented Python developer.
He works at Google.

"""

Метод str()

Для того, чтобы склеить разные типы данных, используем специальные функции преобразования
Пример:

name = 'John'
surname = 'Nash'  
age = 25  # (int)

print(name + " " + surname + ". He is " + age + " years old")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str

Мы получим ошибку, так как мы пытаемся склеить в строку числовой тип в переменной age

Чтобы исправить это, преобразуем age в строку:

name = 'John'
surname = 'Nash'  
age = 25  # (int)

print(name + " " + surname + ". He is " + str(age) + " years old")

Output:
John Nash. He is 25 years old

Получение пользовательского ввода

Функция input()

Эта функция позволяет нам получить пользовательский ввод и сохранить его куда-нибудь в переменную и использовать в дальейшем:

name = input("Enter your name: ")
print(f"Hello {name}!")

Когда мы запустим программу, она скажет нам ввести наше имя:

Enter your name: Mark

Вводим Mark и получаем:

Hello Mark!

Помните, что input() всегда возвращет тип str.

Индексы

Индексы это нумерация значений (символов) внутри итерируемых (где можно пробежаться по каждому символу или значению по отдельности) типов данных. Иными словами это порядок или очередь, только запомните, что в программировании всё начинается с нуля.

bio = 'John Nash'
       012345678 <- индексы каждого символа

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

Символ: d t a b h i r y
Индекс: 5 3 6 0 4 1 2 7
Обратный индекс -3 -5 -2 -8 -4 -7 -6 -1

Срезы

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

language = 'Python'
print(language[2])

Output:
t

Вы можете сказать, “ой, t ведь третяя буква!”. Да, только в мире программирования это не так :)

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

flavor = 'birthday cake'
print(flavor[:3])

Output:
bir

то есть, не указываем начальный индекс, достаточно лишь указать конечный. Тот же принцип применим в получении куска строки начиная от определенного индекса до конца:

print(flavor[5:])

Output:
day cake

Получение кусков строки с ее конца:

print(flavor[-1])

Output:
e


print(flavor[-2])

Output:
k

Получение кусков строки через каждые 2 символа:

flavor = 'birthday cake'
print(flavor[::2])

Output:
brha ae


#… через каждые 3:
print(flavor[::3])

Output:
btace

Форматирование строк:

>>> name = 'Vasya'
>>> print "My name is %s" % (name)
My name is Vasya

С указанием размера полей (перед 'Vasya' стоит пять пробелов, т.е. всего десять символов):

Python

>>> print "My name is %10s. That's my name." % (name)
My name is      Vasya. That's my name.

То же самое, но выровненное по левому краю:

Python

>>> print "My name is %-10s. That's my name." % (name)
My name is Vasya     . That's my name.

Когда это может быть полезно:

>>> drinks = {'Long Island': 3, 'Bloody Mary': 2, 'Margarita':4}
>>> print "%-15s%-5s" % ("Name", "Qty")
Name           Qty
>>> for k,v in drinks.items():
...     print "%-15s%-3s" % (k, v)
...
Bloody Mary     2
Long Island     3
Margarita       4

Если понадобится вывести целую часть числа:

>>> num = 12.34
>>> print "%d" % (num)
12

Вперемешку:

>>> age = 25
>>> print "My name is %s. I'm %d." % (name, age)
My name is Vasya. I'm 25.

Теперь вкратце как работает оператор %

Выражение форматирования можно условно разделить на три части:

определение_формата

+

%

+

объект(ы)

Обозначения %s, %d, %g и т. п. - это форматы типов данных. Если вы знакомы с языком Си, то это тот же синтаксис, что используется для вывода на печать printf().

Спецификации различных типов данных Python приведены в следующей таблице:

Спецификации различных типов данных Python приведены в следующей таблице:

Вот они

Title Значение Формат
Целое десятичное число. 'd'
Целое десятичное число. 'i'
Восьмеричное число. 'o'
Устаревший тип – то же что 'd'. 'u'
Шестнадцатеричное число (нижний регистр). 'x'
Шестнадцатеричное число (верхний регистр). 'X'
Вещественное число в экспоненциальном виде (нижний регистр). 'e'
Вещественное число в экспоненциальном виде (верхний регистр). 'E'
Вещественное число в десятичном виде. 'f'
Вещественное число в десятичном виде. 'F'
Вещественное число. Использует формат 'f' или 'e' в нижнем регистре. 'g'
Вещественное число. Использует формат 'F' или 'E' в верхнем регистре. 'G'
Один символ (или цифра). 'c'
Строка, в которую любой объект Python конвертируется с помощью repr(). 'r'
Строка, в которую любой объект Python конвертируется с помощью str(). 's'
Аргумент не конвертируется, выводится просто символ '%'. '%'

Методы строк

Method Description
capitalize() Конвертирует первую букву слова или предложения в заглавную
casefold() Конвертирует строку в нижний регистр
center() Возвращает центрированную строку
count() Считает количество определенного символа в строке
encode() Возвращает кодированную версию строки
endswith() Возрващает True если строка начинается с определенного символа либо False
find() Ищет определенный символ в строке и возвращает его индекс
format() Форматирует строку
format_map() Форматирует несколько значений в строку
index() Ищет определенный символ в строке и возвращает его индекс
isalnum() Возвращает True, если все символы в строке буквенно-цифровые.
isalpha() Возвращает True, если все символы в строке находятся в алфавите
isdecimal() Возвращает True, если все символы в строке десятичные.
isdigit() Возвращает True, если все символы в строке являются цифрами.
isidentifier() Возвращает True, если строка является идентификатором.
islower() Возвращает True, если все символы в строке строчные.
isnumeric() Возвращает True, если все символы в строке числовые.
isprintable() Возвращает True, если все символы в строке печатаются.
isspace() Возвращает True, если все символы в строке являются пробелами.
istitle() Возвращает True, если строка соответствует правилам заголовка.
isupper() Возвращает True, если все символы в строке заглавные.
join() Присоединяет элементы итерируемого к концу строки
ljust() Возвращает выровненную по левому краю версию строки
lower() Преобразует строку в нижний регистр
lstrip() Возвращает версию строки с обрезкой слева
maketrans() Возвращает таблицу переводов для использования в переводах
partition() Возвращает кортеж, в котором строка разделена на три части
replace() Возвращает строку, в которой указанное значение заменяется указанным значением.
rfind() Ищет в строке указанное значение и возвращает последнюю позицию, где оно было найдено.
rindex() Ищет в строке указанное значение и возвращает последнюю позицию, где оно было найдено.
rjust() Возвращает выровненную по правому краю версию строки
rpartition() Возвращает кортеж, в котором строка разделена на три части
rsplit() Разбивает строку по указанному разделителю и возвращает список
rstrip() Возвращает версию строки с обрезкой справа
split() Разбивает строку по указанному разделителю и возвращает список
splitlines() Разбивает строку по разрывам строки и возвращает список
startswith() Возвращает истину, если строка начинается с указанного значения
strip() Возвращает обрезанную версию строки
swapcase() Меняет местами регистры, нижний регистр становится прописным и наоборот
title() Преобразует первый символ каждого слова в верхний регистр
translate() Возвращает переведенную строку
upper() Преобразует строку в верхний регистр
zfill() Заполняет строку указанным количеством значений 0 в начале

Встроенная функция format()

Работает так:

Python

str.format()

В строке "поля для замены" заключаются в фигурные скобки {}. Все, что не заключено в скобки, воспринимается как обычный текст, которые копируется в неизменном виде. Чтобы передать в тексте символы фигурных скобок, их дублируют: {{ и }}.Поля для замены форматируются следующим образом:

поле_для_замены    ::=  "{" [имя_поля] ["!" конверсия] [":" спецификация] "}"
имя_поля           ::=  имя_аргумента ("." имя_атрибута | "[" номер_элемента "]")*
имя_аргумента      ::=  [идентификатор | integer]
имя_атрибута       ::=  идентификатор
индекс_элемента    ::=  integer | строковый индекс
строковый_индекс   ::=  <любой символ кроме "]"> +
конверсия          ::=  "r" | "s" # str или repr
спецификация       ::=  <описано ниже>

где

спецификация  ::= [[заглушка]выравнивание][знак][#][0][ширина][,][.точность][тип]
заглушка      ::= <любой символ>
выравнивание  ::= "<" | ">" | "=" | "^"
знак          ::=  "+" | "-" | " "
ширина        ::=  integer # ширина поля
точность      ::=  integer # знаки после десятичной запятой
тип           ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Записывается так:

Python

>>> print """\n{0}
... Сидел на стене
... {0}
... Свалился во сне.""".format('Шалтай-Болтай')

Шалтай-Болтай
Сидел на стене
Шалтай-Болтай
Свалился во сне.

Как видите, этот способ гораздо гибче оператора '%', так как одни и те же значения мы можем использовать повторно и в любом порядке. Также можно передать именованные аргументы, и тогда обращаться к ним будем не по номерам, а по именам.

Еще пример форматирования:

Python

>>> toc = (
... ('Первая глава', '3'),
... ('Вторая глава', '150')
... )
>>> for line in toc:
...   print('{:.<30}{}'.format(*line))
...
Первая глава.......3
Вторая глава.......150

Самостоятельная работа:

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

Note:

Гуглить - самый важный навык программиста. Вы должны правильно уметь гуглить информацию и всегда найдете ответ)

Даже самые опытные программисты сидят и гуглят, то, что не знают)

Отзыв