Ответ сервиса — это текст. Номер заказа, код ответа, сумма, статус — всё приходит кусками текста, которые надо где-то держать, складывать и сравнивать. Для этого в языке есть переменные: имя, за которым закреплено значение.
Переменная — имя для значения; значение можно заменить. Строка и число выглядят похоже, а ведут себя по-разному.
Переменная — это имя для значения
живой пример
статус = 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— с этого начинаются все проверки.
Что почитать дальше
- Сравнения и условия — как программа принимает решение.
- Списки и словари — как устроен JSON изнутри.