Python: Магические числа
Рассмотрим пример программы, которая выполняет конвертацию валют:
euros_count = 1000
dollars_count = euros_count * 1.25 # 1250.0
rubles_count = dollars_count * 60 # 75000.0
print(rubles_count)Технически код работает. Но с точки зрения профессиональной разработки такой код считается плохой практикой.
В чем проблема?
В выражениях использованы непонятные числа: 1.25 и 60. Что это за значения? Курс валют? Откуда они взялись? Через месяц или год вы, скорее всего, не вспомните, что именно означают эти числа. А если код откроет другой разработчик, он просто не поймет, откуда все берется. Такие числа называются магическими.
Магические числа (magic numbers) представляют собой числовые значения, смысл которых не ясен из кода. Обычно они используются в математических выражениях напрямую, без переменных с понятными названиями. Чтобы понять их назначение, приходится вникать в контекст или читать дополнительную документацию. Магические числа затрудняют чтение, понимание и поддержку кода.
Как избежать магии
Самый простой способ состоит в том, чтобы вынести такие значения в переменные с понятными именами. Тогда смысл станет очевиден:
dollars_per_euro = 1.25
rubles_per_dollar = 60
euros_count = 1000
dollars_count = euros_count * dollars_per_euro # 1250.0
rubles_count = dollars_count * rubles_per_dollar # 75000.0
print(rubles_count)Сами числа никуда не делись, но теперь они записаны в переменные, названия которых однозначно говорят, что это.
Вывод
Магические числа делают код непонятным и трудным для поддержки. Чтобы избежать этой проблемы, нужно заменять такие числа переменными с осмысленными именами. Это делает код более читаемым, особенно в долгосрочной перспективе. Понятный код всегда важнее компактности, даже если программа станет чуть длиннее.
Задание
Склад принял поставку. Вы столкнулись с таким кодом, который считает общее количество ящиков:
label = "Ящиков на складе:"
print(label)
print(6 * 17)Числа 6 и 17 здесь — магические: непонятно, что они означают. Избавьтесь от них, создав переменные с понятными именами, и выведите результат на экран.
Получится так:
Ящиков на складе:
102Названия переменных должны передавать смысл чисел, но оставаться короткими и емкими.
Помните: код будет работать с любыми названиями, а система проверяет только результат на экране — выполнение задания под вашу ответственность.
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import runpy
def test(capsys):
expected = "Ящиков на складе:\n102"
runpy.run_module('solution')
out, _ = capsys.readouterr()
assert out.strip() == expectedРешение учителя откроется через:
20:00
