← назад к разделу

Ответ сервиса — это текст. Номер заказа, код ответа, сумма, статус — всё приходит кусками текста, которые надо где-то держать, складывать и сравнивать. Для этого в языке есть переменные: имя, за которым закреплено значение.

имя = значение status 200 404имя то же кавычки решают всё "200" + "1" = "2001" 200 + 1 = 201 из ответа сервиса всё приходит текстом — переводите int()

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

Переменная — это имя для значения

живой пример

статус = 200
номер = "ord-042"
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Слева имя, справа значение, между ними знак равенства. Это не «равно» из математики, а «положи справа в то, что слева». Дальше по имени достают значение:

живой пример

номер = "ord-042"   # из прошлого примера
print(номер)        # напечатает ord-042
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Имя можно менять — переменная на то и переменная:

живой пример

статус = 200
статус = 404
print(статус)     # 404
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Имена пишут латиницей и по-английски — так принято в коде, и так его прочитают коллеги. Русские имена язык допускает, и в примерах учебных задач они помогают не путать своё с чужим, но в рабочем проекте пишите order_id, а не номер.

Числа и строки — разные вещи

Это первое, обо что спотыкаются все. Посмотрите:

живой пример

код = "200"        # строка: это текст из трёх символов
код = 200          # число: с ним можно считать
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Кавычки решают всё. "200" — строка, 200 — число. Для человека разницы нет, для программы — огромная:

живой пример

print("200" + "1")     # 2001 — строки склеились
print(200 + 1)         # 201 — числа сложились
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

А если смешать — программа остановится с ошибкой TypeError: can only concatenate str (not "int") to str. По-русски: «строку можно склеить только со строкой». Это частая ситуация: из ответа сервиса всё приходит текстом, а считать надо числами.

Перевод строки в число:

живой пример

сумма = int("4990")        # 4990, теперь это число
цена = float("99.90")      # 99.9, дробное число
print(сумма + 10)          # 5000 — уже считается
print(цена)
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

И обратно:

живой пример

текст = str(4990)          # "4990"
print(текст + " ₽")        # 4990 ₽ — склеилось как текст
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

int() на строке "четыре" упадёт с ошибкой — и правильно сделает: превращать там нечего.

Строки: то, с чем работают каждый день

Строку пишут в кавычках — одинарных или двойных, разницы нет: 'ord-042' и "ord-042" — одно и то же. Выбирают те, которых нет внутри самого текста.

Длина — сколько символов:

живой пример

print(len("ord-042"))     # 7
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Склейка — плюсом:

живой пример

имя = "Анна"
print("Покупатель: " + имя)
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Подстановка значений — f-строка, самый удобный способ. Перед кавычками ставят букву f, а внутри в фигурных скобках пишут выражение:

живой пример

номер = "ord-042"
сумма = 4990
print(f"Заказ {номер} на сумму {сумма} ₽")
# Заказ ord-042 на сумму 4990 ₽
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Внутри скобок можно считать: f"итого {цена * 2}". Строка собирается в момент выполнения — это то, чем удобно строить сообщения об ошибке в тестах.

Поиск внутри строки — оператором in:

живой пример

ответ = "Заказ не найден"
print("не найден" in ответ)    # True
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Результат — True или False, «да» или «нет». Эти два значения называются логическими, и на них держатся все проверки.

Полезные действия со строкой:

живой пример

print("  ord-042  ".strip())          # "ord-042" — убрать пробелы по краям
print("ORD-042".lower())              # "ord-042" — в нижний регистр
print("ord-042".startswith("ord"))    # True — начинается с
print("ord-042".split("-"))           # ['ord', '042'] — разрезать по символу
print("ord-042".replace("ord", "x"))  # "x-042" — заменить
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

strip() и lower() спасают при сравнении данных из разных источников: в выгрузке «Анна », в базе «анна», и глазами это одно и то же, а для программы — нет.

Комментарии

Всё после знака # в строке — заметка для человека, программа это пропускает:

живой пример

цена = 4990        # цена без скидки
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Неделя бесплатно →

Комментарии пишут там, где код не объясняет почему: что делает строка, и так видно.

Частые ошибки новичка

Кавычки не закрытыprint("привет). Ошибка SyntaxError, в сообщении указана строка; проверьте пары кавычек и скобок.

Имя с опечаткой — завели номер, обратились к намер. Ошибка NameError: name 'намер' is not defined, то есть «такого имени я не знаю».

Сравнили число со строкой200 == "200" даёт False. Не ошибка, а молчаливое «не сошлось»: программа не падает, а тест ведёт себя странно. Ловится приведением к одному типу.

Что решать

В тренажёре — первая тема банка «Первые шаги»:

Коротко

  • Переменная — имя для значения; знак = кладёт значение в имя, а не сравнивает.
  • "200" и 200 — разные вещи: строка и число. Из ответа сервиса всё приходит текстом, считать надо числами — переводит int() и float().
  • f-строка (f"Заказ {номер}") — обычный способ собрать сообщение из кусков.
  • strip() и lower() приводят данные из разных источников к сравнимому виду.
  • in отвечает True или False — с этого начинаются все проверки.

Что почитать дальше