Перейти к содержанию

412 уроков, 25 библиотек и челлендж «Что выведет код?» — бесплатно, код прямо в браузере

Начать обучение
Урок 1 из 20 Начальный 20 мин 100 XP

Строки в Python: текст как данные

Строка — самый частый тип данных в реальных задачах: имена, города, сообщения. Знакомимся с типом str: кавычки, len, конкатенация и умножение — и узнаём, почему строку нельзя переписать на месте.

Редакция Питоники

Текст окружает любую программу: имя пользователя в форме, город в доставке, сообщение бота, строка лога, колонка CSV-файла. Всё это в Python — строки, тип str. Раздел начинается с фундамента: что вообще считается строкой, как её записать, как измерить, склеить и повторить — и почему одну из этих операций Python запретит.

Ничего устанавливать не нужно: строки — часть самого языка. Каждый код-блок на странице запускается в браузерном интерпретаторе кнопкой «Запустить» — вывод можно проверить сразу.

Кавычки: одинарные и двойные

Строка — это последовательность символов в кавычках. Python разрешает два вида: одинарные и двойные — и они полностью равнозначны. 'кот' и "кот" — одна и та же строка, Python даже не отличит:

два вида кавычек — одна строка
first = 'кот'
second = "кот"
print(first == second)
print(type(first))
Вывод
True
<class 'str'>

Функция type() вернула str — так называется строковый тип. А равенство True означает: для Python это буквально одно и то же значение. Выбирают обычно один стиль и держатся его во всём проекте — так код выглядит единообразно.

len: сколько в строке символов

len (от англ. length — длина) считает символы строки. Это встроенная функция, а не метод: строка передаётся ей в скобках:

длина строки
print(len('кот'))
print(len(' кот '))
print(len(''))
Вывод
3
5
0

Три сюрприза в одном блоке: пробел — тоже символ и считается наравне с буквами (строка ' кот ' длиннее слова «кот» на два), а пустая строка '' — полноценная строка длиной ноль. Пустая строка встречается везде: это «ничего не ввели», «не нашли», «очистили».

Конкатенация: плюс склеивает строки

Конкатенация — склейка строк оператором +. Берёшь одну строку, прибавляешь другую — получаешь третью:

склейка строк
greeting = 'Привет, '
name = 'Аня'
message = greeting + name
print(message)
print('кот' + ' ' + 'код')
Вывод
Привет, Аня
кот код

Пробел между словами — это тоже строка, поэтому 'кот' + ' ' + 'код' собрал фразу с зазором. Плюс работает только со строками и только со строками: строка плюс строка — склейка, число плюс число — сумма. А строка плюс число? Python отказывается угадывать, что вы имели в виду, — сравните:

строки и числа складываются по-разному
print('3' + '3')
print(3 + 3)
Вывод
33
6

Умножение: строка на число

Второй арифметический фокус со строками: умножение на целое число повторяет строку нужное количество раз. Разделители таблиц, рамки, подчёркивания — всё это делается в одну строку кода:

повтор строки
line = '-' * 20
print(line)
print('ля' * 3)
print('кот' * 0)
Вывод
--------------------
ляляля

'ля' * 3 собрал 'ляляля' — три повтора подряд, без разделителей. А 'кот' * 0 дал пустую строку: ноль повторов — это ничего, и print вывел пустую строку. Умножение на отрицательное число работает так же — даст пустую строку, ошибки не будет.

Неизменяемость: строку нельзя переписать

Строки в Python неизменяемы (immutable): после создания строку нельзя поменять ни на один символ. Это не стиль, а жёсткое правило языка — и первый по частоте сюрприз новичка. Попробуем переписать первую букву слова «кот»:

попытка изменить символ
s = 'кот'
try:
    s[0] = 'X'
except TypeError as e:
    print(e)
print(s)
Вывод
'str' object does not support item assignment
кот

Квадратные скобки s[0] достают символ по номеру — нумерация идёт с нуля, о ней подробно рассказано в уроке про срезы. Но присвоить через них новое значение нельзя: Python отвечает 'str' object does not support item assignment — «строка не поддерживает присваивание элементу». Строка s после этого всё та же: «кот».

Как же «изменить» строку? Собрать новую и записать в переменную — хоть с тем же именем. Первую букву заменит склейка: новый символ плюс хвост старой строки:

новая строка вместо правки
s = 'кот'
fixed = 'Р' + s[1:]
print(fixed)
print(s)
Вывод
Рот
кот

Запись s[1:] означает «всё, начиная с символа номер один» — срез, его полный разбор ждёт в уроке 2. Важно другое: исходная строка не тронулась, мы получили новую — Рот — и положили её в новую переменную. Тот же принцип у всех методов строк: replace и strip тоже возвращают новые строки, не меняя старые.

print печатает аргументы через пробел и переводит строку — это стоит помнить при склейке вывода:

print: пробел и перенос по умолчанию
print('кот', 'код', 'ток')
print('кот', 'код', sep=' | ')
print('без', end=' ')
print('переноса')
Вывод
кот код ток
кот | код
без переноса

Несколько аргументов через запятую print разделяет пробелом; параметр sep заменяет этот разделитель, а end — то, чем заканчивается вывод (по умолчанию переносом строки). В этом курсе вывод почти всегда одна строка на print — так результат легко сверить с ожидаемым.

Сценарий: чек из двух полей формы

Приём заказа в маленьком интернет-магазине выглядит так: в форме два поля — название товара и количество. Валидатор проверил, что поля не пустые, и передал программе две строки: title = 'Кружка' и count = '3'. Дальше нужно показать покупателю, что он заказал, и записать это в лог. Обе задачи — про сборку текста из готовых кусочков.

чек из двух полей
title = 'Кружка'
count = '3'

label = title + ' x' + count
total = 'К заказу: ' + label
print(total)
print(len(total))
Вывод
К заказу: Кружка x3
19

Счёт в форме пришёл строкой, и в этой задаче это даже удобно: количество показывают как есть, одним куском текста, без всякой арифметики. Длина собранной строки — 19 символов, и len посчитал её быстро, потому что длина хранится рядом с текстом, а не вычисляется перебором букв.

Число или строка: откуда берётся разница

Строки не возникают из воздуха: их приносят input(), CSV-файл, JSON, строка лога. И почти всегда это именно текст, даже когда за ним стоит число. Поэтому первое, что стоит сделать с полученным значением, — привести его к нужному типу явно: int(count), float(price). И наоборот: если число надо показать в тексте, его надо превратить в str().

одни данные — три типа
count = '3'
price = '129.5'

print(int(count) * 2)
print(float(price) + 0.5)
print(str(int(count)) + ' шт.')
Вывод
6
130.0
3 шт.
TypeError при сложении строки и числа
number = '41'
try:
    print(number + 1)
except TypeError as e:
    print('Ошибка типа:', type(e).__name__)
print(int(number) + 1)
Вывод
Ошибка типа: TypeError
42

Строки, числа и списки: одна таблица, три разных правила

ОперацияСтрокаЧисло
Сложить'кот' + 'код' → 'коткод'3 + 4 → 7
Повторить'ля' * 3 → 'ляляля'3 * 4 → 12
Измеритьlen('кот') → 3у числа длины нет, нужна str()
Изменитьнельзя — только собрать новуюn = n + 1 работает
Узнать типtype('кот') → strtype(3) → int

Разница между строками и числами не в синтаксисе, а в смысле. Число можно увеличить, и оно останется тем же числом. Строку увеличить нельзя, поэтому каждая правка текста создаёт новый объект — и это правило стоит держать в голове весь курс.

Что лежит внутри строки

Строка — не «текст вообще», а конкретный объект: в нём лежит ссылка на последовательность символов и отдельно записанная длина. Длина хранится рядом с текстом, поэтому len не пересчитывает её, проходя по буквам. Отсюда и то, что у пустой строки длина равна нулю, а не «неизвестно».

Вторая деталь: короткие строки Python часто не создаёт заново, а берёт из заранее заготовленных. Именно поэтому 'кот' + 'код' не тормозит, а вот склейка тысяч кусков в цикле — тормозит: там каждый раз появляется новый объект, и прежний текст копируется целиком. Про разницу в скорости — в уроке про join.

Карточка операций урока

ОперацияПримерРезультат
len(s)len('кот')3
s1 + s2'кот' + 'код''коткод'
s * n'ля' * 3'ляляля'
s * 0'кот' * 0'' (пустая строка)
s[i] = xs[0] = 'X'TypeError — строки неизменяемы

Следующий шаг — доставать из строки не только длину, но и части: символы, куски, разворот. Это срезы, и они заслуживают отдельного урока 2. А чтобы красиво вставлять значения в текст без плясок с плюсами и str(), добро пожаловать в урок 3 про f-строки.

Строка — последовательность символов в кавычках: len считает символы, плюс склеивает, умножение повторяет, а изменить готовую строку нельзя — только собрать новую.

Что выведет код?

Сначала предскажи ответ в голове — это главный навык программиста.

print('кот' + ' ' + 'код')
s = 'код'
print(len(s) * s[0])
print('8' + '2')
print(8 + 2)
Проверь себя
0 / 7

1. Как записать строку в Python?

2. Что вернёт len('кот код')?

3. Что выведет print('ля' * 3)?

4. Что произойдёт после s = 'кот' и s[0] = 'Х'?

5. Как получить строку «Год: 2026» плюсом?

6. Что произойдёт при выполнении 'кот' + 3?

7. Что вернёт выражение 'ля' * 0?

Карточки терминов
Запомнено: 0 / 9
Практика

Переменные title = 'Отчёт' и count = 3 уже заданы. Выведи строку-разделитель из 15 дефисов, затем строку «Отчёт: 3 шт.» — собери её конкатенацией, превратив число в строку через str().

practice.py
Вопросы и ответы по уроку

Какие кавычки использовать для строк в Python?

Любые: одинарные и двойные кавычки дают одинаковый тип str и не отличаются ничем. Внутри двойных кавычек можно свободно писать апостроф, внутри одинарных — двойные. Конвенция большинства проектов: одинарные кавычки везде, двойные — только когда в тексте есть апостроф.

Урок 2: срезы строк

Как объединить строку и число в Python?

Либо превратить число в строку через str() и склеить плюсом: 'Год: ' + str(2026), либо — и это стандарт с версии 3.6 — взять f-строку: f'Год: {2026}'. F-строки короче, читаемее и быстрее: значение подставляется прямо в текст без ручных конвертаций.

Урок 3: f-строки

Почему нельзя изменить символ в строке?

Строки в Python неизменяемы: попытка s[0] = 'X' завершается TypeError. Чтобы «поменять» букву, собирают новую строку — склейкой, срезом или методом вроде replace, — а результат записывают в переменную. Неизменяемость делает строки безопасными ключами словарей.

Урок 7: replace

Что делает функция len()?

len() возвращает количество символов в строке: len('кот') — это 3, len(' кот ') — 5, потому что пробелы тоже символы. Для пустой строки len('') даёт 0. Та же функция работает со списками, кортежами и другими коллекциями.

Почему 'кот' + 3 выдаёт ошибку, а не 'кот3'?

Python не угадывает намерения: плюс у строк только склейка, и оба операнда должны быть строками. У числа два пути: обернуть его в str(3) при склейке или воспользоваться f-строкой f'{3}', которая конвертирует значения сама.

Урок 3: f-строки

Как узнать тип значения в Python?

Встроенной функцией type(): type('кот') вернёт <class 'str'>, type(3) — <class 'int'>. Вывод type() — первое, что стоит посмотреть, когда программа ведёт себя не так, как ожидалось: сразу видно, текст это или число.

Понравился урок? Сошлитесь на него

«Текст окружает любую программу: имя пользователя в форме, город в доставке, сообщение бота, строка лога, колонка CSV-файла.»

Скопируйте готовую ссылку в формате HTML, Markdown или чистый адрес и вставьте в статью на Habr, VC, Telegram-канал или свой блог — так о проекте узнают новые читатели.

TelegramVK

Что дальше

Осталось в разделе: 20 из 20. Прогресс хранится в вашем браузере.

Похожие уроки по темам

Подобраны автоматически по пересечению тем и ключевых слов.