Строки в Python представлены типом str (от англ. string – строка) и представляют собой упорядоченные последовательности символов, заключённые в кавычки. Строки используются для хранения и обработки текстовой информации. Будь то имена, адреса, тексты книг или любые другие данные, которые можно представить в виде текста, в Python они обычно обрабатываются как строки.

Для создания строковой переменной достаточно заключить любой текст в одинарные (') или в двойные (") кавычки:

message = 'Что на ужин?'
reply_message = ""  # Пустая строка – тоже строка

Длинные строки

Если строка очень длинная, то её можно разбить на части с помощью тройных кавычек:

recipe = """Ингредиенты:
1–2 столовые ложки растительного масла или кусочек сливочного;
1 или несколько яиц;
соль — по вкусу."""
print(recipe)

При выводе такой строки на экран в ней сохранятся все символы, включая переносы строк:

Ингредиенты:
1–2 столовые ложки растительного масла или кусочек сливочного;
1 или несколько яиц;
соль — по вкусу.

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

info = ("Тест Тьюринга — эмпирический тест, идея которого была "
        "предложена Аланом Тьюрингом в статье «Вычислительные машины "
        "и разум», опубликованной в 1950 году в философском журнале" 
        " Mind. Тьюринг задался целью определить, может ли машина "
        "мыслить.")
print(info)

Python автоматически объединит эти части в одну строку и в полученной строке переносов строк не будет:

Тест Тьюринга — эмпирический тест, идея которого была предложена Аланом Тьюрингом в статье «Вычислительные машины и разум», опубликованной в 1950 году в философском журнале Mind. Тьюринг задался целью определить, может ли машина мыслить.

Обратите внимание, что запятые между строками в скобках ставить не нужно, иначе будет создан кортеж, а не строка.

Преобразование в строку

Практически для любого объекта в Python можно получить его строковое представление с помощью функции str(). Это означает, что мы можем преобразовать любые числа в строки.

Функция

str(obj)

Описание

Возвращает строку, полученную из объекта obj

Параметры

  • obj – объект, строку из которого требуется получить

Возвращаемое значение

Строка

Например, преобразуем в строку целое число:

number = 21
str_number = str(number)
print(str_number) 
# Вывод: 21

При выводе на экран может быть не так очевидно, что переменная number хранит строку, однако мы можем убедиться в этом с помощью функции type():

print(type(str_number))
# Вывод: <class 'str'>

Если функции str() передано арифметическое выражение, то сначала оно будет вычислено, и только затем преобразовано:

print(str(30 + 1)) 
# Вывод: 31

Базовые операции со строками

Python предоставляет несколько базовых операций для работы со строками: конкатенацию (сложение) и повторение (умножение).

Конкатенация (сложение) строк

Операция конкатенации объединяет две строки в одну новую строку с помощью оператора сложения (+).

fist_name = "Бильбо"
last_name = "Бэггинс"
print(fist_name + " " + last_name) 
# Вывод: Бильбо Бэггинс

Как и при сложении чисел, допускается использовать оператор присваивания со сложением (+=). Тогда результат конкатенации строк будет сразу же присвоен переменной слева:

name = "Фродо"
last_name = "Бэггинс"
name += last_name
print(name) 
# Вывод: ФродоБэггинс

При этом оператор += не изменяет исходную строку, а создаёт новый объект, который присваивает переменной name. Это связано с неизменяемостью строк.

Конкатенация возможна только между двумя строками. Попытка сложить строку с числом приведет к ошибке TypeError. Чтобы избежать этого, число должно быть преобразовано в строку с помощью функции str():

amount = 3
print("Яблоки: " + str(amount)) 
# Вывод: Яблоки: 3

Повторение (умножение) строк

Оператор умножения * при работе со строками выполняет операцию повторения. Он создаёт новую строку, которая является результатом многократного повторения исходной строки. Левый операнд должен быть строкой, а правый – целым числом, указывающим, сколько раз необходимо повторить строку:

print("Кар-кар" * 3) 
# Вывод: Кар-карКар-карКар-кар

Здесь также разрешается использование оператора присваивания с умножением (*=), который создаёт новую строку и присваивает её переменной слева:

song = "о-оу"
song *= 3
print(song)
# Вывод: о-оуо-оуо-оу

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

Форматирование строк – это процесс создания новых строк путем вставки в них значений переменных или результатов выражений в определенном формате. Python предлагает несколько способов форматирования строк.

Для этого мы можем использовать уже знакомую нам конкатенацию строк:

first_name = "Энакин"
last_name = "Скайуокер"
age = 26
print("Меня зовут " + first_name + " " + last_name + ". Мне " + str(age) + " лет.")
# Вывод: Меня зовут Энакин Скайуокер. Мне 26 лет.

Однако, чем больше в такой строке переменных, тем сложнее она становится для чтения. Также необходимо следить за тем, чтобы все элементы были строками, при необходимости используя функцию str().

Одним из самых удобных и современных способов встраивания выражений в строку является использование f-строк (форматированных строковых литералов). Для того, чтобы создать f-строку, достаточно поставить префикс f перед открывающей кавычкой строки, а любые переменные или выражения Python заключить в фигурные скобки:

print(f"Меня зовут {first_name} {last_name}. Мне {age} лет.")
# Вывод: Меня зовут Энакин Скайуокер. Мне 26 лет.

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

Также внутри фигурных скобок в f-строках можно использовать любые допустимые выражения Python, включая арифметические операции и вызовы функций:

n = 2
power = 8
print(f"{n} в степени {power} равняется {n ** power}") 
# Вывод: 2 в степени 8 равняется 256

Кроме этого, f-строки поддерживают спецификаторы формата, которые контролируют, как именно отображается значение внутри строки. Спецификатор формата следует после двоеточия внутри фигурных скобок.

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

pi = 3.1415926535
print(f"Число Пи приблизительно равно {pi:.2f}") 
# Вывод: Число Пи приблизительно равно 3.14

Здесь .2f – спецификатор формата, который задает желаемое количество знаков после десятичной точки (в данном случае 2), а также указывает, что число должно быть отформатировано как число с плавающей точкой (f от float).

Примеры

Пример 1. Вывод на экран приветственного сообщения

Программа выводит на экран многострочное приветственное сообщение:

# Используем тройные кавычки для сохранения переносов строк
welcome_message_triple_quotes = """Добро пожаловать в программу!
Пожалуйста, ознакомьтесь с правилами:
1. Соблюдайте конфиденциальность.
2. Будьте вежливы.
3. Улыбнитесь.
Спасибо за сотрудничество!"""
print(welcome_message_triple_quotes, end="\n\n")
 
# Объединяем строки в скобках для создания одной длинной строки
welcome_message_parentheses = (
    "Сегодняшний день - чистый лист бумаги, на котором "
    "предстоит нарисовать самые яркие краски своей жизни. "
)
print(welcome_message_parentheses)

Вывод:

Добро пожаловать в программу!
Пожалуйста, ознакомьтесь с правилами:
1. Соблюдайте конфиденциальность.
2. Будьте вежливы.
3. Улыбнитесь.
Спасибо за сотрудничество!

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

Пример 2. Создание отчёта о продажах

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

# Данные о продажах товара A и товара B
product_a_name = "Мышь беспроводная"  # Название товара A
product_a_sales = 140  # Всего продано товара A
product_a_revenue = 13553.5  # Общая выручка по товару A
product_b_name = "Клавиатура беспроводная"  # Название товара B
product_b_sales = 75  # Всего продано товара B
product_b_revenue = 28373.5  # Общая выручка по товару B
 
# Общие показатели
total_sales = product_a_sales + product_b_sales  # Всего продано 
total_revenue = product_a_revenue + product_b_revenue  # Общая выручка
        
# Расчет доли каждого товара в общей выручке в процентах
product_a_share = (product_a_revenue / total_revenue) * 100  
product_b_share = (product_b_revenue / total_revenue) * 100
 
print(f"Общее количество проданных товаров: {total_sales} шт.")
print(f"Общая выручка: {total_revenue} руб.\n")

print(f"Товар: {product_a_name}")
print(f"  Продано: {product_a_sales} шт.")
print(f"  Выручка: {product_a_revenue} руб.")
print(f"  Доля в общей выручке: {product_a_share:.1f}%")

print(f"Товар: {product_b_name}")
print(f"  Продано: {product_b_sales} шт.")
print(f"  Выручка: {product_b_revenue} руб.")
print(f"  Доля в общей выручке: {product_b_share:.1f}%")

Вывод:

Общее количество проданных товаров: 215 шт.
Общая выручка: 41927.0 руб.

Товар: Мышь беспроводная
  Продано: 140 шт.
  Выручка: 13553.5 руб.
  Доля в общей выручке: 32.3%

Товар: Клавиатура беспроводная
  Продано: 75 шт.
  Выручка: 28373.5 руб.
  Доля в общей выручке: 67.7%

Итоги

  • Строки – упорядоченные последовательности символов, заключённые в кавычки.
  • Длинные строки можно разбивать на части с помощью тройных кавычек (сохраняются переносы строк) или круглых скобок (не сохраняются переносы строк)
  • Функция str() преобразует практически любой объект (включая числа и результаты выражений) в строку.
  • Конкатенация (+) объединяет две или более строк в одну.
  • Повторение (*) создаёт новую строку путём многократного повторения исходной строки (строка * целое число).
  • F-строки позволяют встраивать переменные или выражения в строку с помощью фигурных скобок.
  • F-строки поддерживают спецификаторы формата (например, {pi:.2f} для округления дробных чисел).

Задания для самопроверки

1. Чем отличаются длинные строки, созданные с помощью тройных кавычек от строки, разделённой с помощью скобок?

Они сохраняют перенос строки.

2. Преобразуйте число 23 в строку.

str_number = str(23)

3. Найдите и исправьте ошибку в данном коде:

price = 17
str_price = str(price)
print(price + " долларов")
price = 17
str_price = str(price)
print(str_price + " долларов")

Вместо целочисленной переменной price при конкатенации строк следует использовать строковую переменную str_price.

4. Используйте оператор умножения (*) и создайте строку "УраУраУраУраУраУраУра" из строки "Ура".

print("Ура" * 7)

5. Что будет выведено на экран в результате выполнения данного кода?

number1 = 3
number2 = 5
print(f"Сумма чисел {number1} и {number2} равна {number1 + number2}")
Сумма чисел 3 и 5 равна 8

6. Используйте спецификаторы формата и выведите на экран число Эйлера e = "2.7182818284" с тремя знаками после точки.

e = "2.7182818284"
print(f"Число Эйлера приблизительно равно {e:.2f}") 
# Вывод: Число Эйлера приблизительно равно 2.718