Бран · продюсер «Хроник Пограничья»
Блокнот открылся. Для проверки дам маленькую сводку: 120 игроков, 30 покупателей, 12 990 рублей выручки и 30 покупок. Покажи долю покупателей и средний чек так, чтобы завтра можно было заменить исходные числа.
Сводка учебная. Покупателей и покупок в ней поровну, по 30, но это разные величины: в реальных данных один покупатель может сделать несколько покупок.
В предыдущем уроке ты запускал арифметику и сохранял блокнот. Теперь запусти в новой ячейке:
players = 120
buyers = 30
print(buyers / players * 100)
Результат 25.0: покупателями стали 25% игроков из учебной сводки. В отличие от записи 30 / 120 * 100, здесь видно, что означает каждое число.
Имя хранит значение, а не формулу
В строке players = 120 знак = присваивает имени players значение справа. Имя позволяет обратиться к этому значению позже. Это переменная.
Читай присваивание справа налево: сначала вычисли правую часть, затем свяжи результат с именем слева. Это не равенство из школьной алгебры и не сравнение из SQL.
Имена пиши без пробелов. Для нескольких слов используй подчёркивание: revenue_rub, conversion_pct. Цифра может быть внутри имени, но не в начале. buyers и Buyers разные имена: регистр букв важен.
Проверь в отдельной ячейке:
players = 120
buyers = 30
conversion_pct = buyers / players * 100
buyers = 24
print(conversion_pct)
Он всё ещё напечатает 25.0. Python запомнил результат вычисления, а сама формула не пересчитывается. Если после изменения buyers снова выполнить строку conversion_pct = buyers / players * 100, получится 20.0.
Поэтому в блокноте исходные данные ставь выше расчётов и выполняй ячейки в порядке документа. Перед отправкой повтори перезапуск ядра и выполнение всех ячеек, как в прошлом уроке.
Пять видов значений на столе аналитика
Запусти этот пример целиком:
purchases = 30
revenue_rub = 12990.0
game = "Хроники Пограничья"
is_complete = True
refund_rub = None
print(purchases, revenue_rub, game, is_complete, refund_rub)
Вывод:
30 12990.0 Хроники Пограничья True None
В print можно передать несколько значений через запятую: по умолчанию Python разделит их пробелом и завершит строку переводом строки. Запятая здесь разделяет то, что печатается; это не десятичный разделитель.
| Запись | Тип | Что означает |
|---|---|---|
30 | int | Целое число, например число покупок |
12990.0 | float | Число с дробной частью; десятичный разделитель в коде точка |
"Хроники Пограничья" | str | Текстовая строка в прямых кавычках |
True, False | bool | Ответ «да» или «нет», например завершена ли выгрузка |
None | NoneType | Значения нет: оно неизвестно или его не прислали |
True, False и None пишутся с заглавной буквы и без кавычек. "None" уже текст, не отсутствие значения.
В SQL ты встречал NULL. None тоже может обозначать пропуск, но правила SQL на него не переносятся: арифметика с None не вернёт тихий пропуск, а упадёт с ошибкой. Пока не подставляй пропущенные числа в расчёт.
Чтобы спросить Python о типе, используй встроенную команду type со значением в скобках:
print(type(30))
print(type("30"))
print(type(None))
Она выведет <class 'int'>, <class 'str'> и <class 'NoneType'>, по строке на результат. Слово class входит в стандартный ответ Python, разбираться в классах для этого не нужно.
Один знак присваивает, два сравнивают
Запусти в новой ячейке:
purchases = 30
print(purchases == 30)
print(purchases == 0)
Получится True, затем False. Два знака == сравнивают значения и дают логический ответ. Один = присваивает значение имени.
В SQL сравнивают через =, поэтому рука может набрать привычный знак. В Python purchases = 0 заменит число покупок нулём, а не спросит, равно ли оно нулю.
Для текста правило то же: "paid" == "paid" даёт True, а "paid" == "refunded" даёт False. Обе стороны сравнения остаются в кавычках, потому что это текст.
урок из курса
Урок из курса «Аналитика данных с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.