Модули math и random в Python
Автор: Казачкин Даниил Михайлович · Обновлено
Команда import загружает его один раз, после чего к функциям обращаются через точку: math.sqrt, random.randint.
Модуль — файл с готовыми именами. Команда import загружает его один раз, после чего к функциям обращаются через точку: math.sqrt, random.randint. Префикс модуля показывает происхождение операции и предотвращает конфликты имён.
Расчёт и псевдослучайное значение
import math
import random
radius = 3
area = math.pi * radius ** 2
dice = random.randint(1, 6)
print(f'{area:.2f}')
print(1 <= dice <= 6)Первая строка всегда равна 28.27, вторая всегда True. Сам dice меняется от запуска к запуску, поэтому вместо конкретного числа проверяется допустимый диапазон. randint включает обе границы.
Импорт должен быть предсказуемым
Обычно import располагают в начале файла. Запись from math import sqrt позволяет вызвать sqrt напрямую, но при большом числе импортов происхождение имени менее очевидно. Конструкция import * засоряет пространство имён и не подходит для понятного учебного кода.
Не называйте собственный файл math.py или random.py рядом с программой. Тогда Python может импортировать его вместо стандартного модуля, а сообщение о частично инициализированном модуле будет запутанным. После переименования иногда нужно удалить созданную папку __pycache__.
Проверяем случайность без точного ответа
Смоделируйте десять бросков кубика, сохраните результаты в список и убедитесь, что каждый находится от 1 до 6. Посчитайте сумму. Для воспроизводимого эксперимента временно вызовите random.seed(42) перед генерацией и сравните два запуска; затем уберите seed из обычной программы. Отдельно вычислите гипотенузу катетов 3 и 4 через math.sqrt — ожидается 5.0.
Документация модуля как источник контракта
Откройте интерактивную справку help(math.sqrt) и help(random.randrange), сравните допустимые аргументы и границы. Не угадывайте, включается ли правая граница: подтвердите это документацией и небольшим тестом. Затем импортируйте math под псевдонимом и оцените, улучшило ли это чтение; короткое имя оправдано только при общепринятом соглашении. Создайте собственный файл geometry.py с одной функцией, импортируйте его из main.py и запустите из правильной папки. Переименование файла продемонстрирует, как Python ищет модуль и почему структура проекта влияет на import.
Практикум: воспроизводимая случайная задача
Сгенерируйте пять целых чисел через random.randint, сначала без настройки, затем с фиксированным seed. Повторите запуск и сравните последовательности. Используйте math.sqrt для проверки расстояния до начала координат и обработайте недопустимое отрицательное значение для отдельной задачи корня. Посмотрите документацию функций и подпишите, включаются ли обе границы randint. В тесте не полагайтесь на «случайно подходящий» ответ: задайте seed или подмените источник случайности.
Контрольная точка
Почему фиксированный seed полезен для воспроизведения дефекта, но не делает алгоритм по-настоящему случайным? Назовите данные, которые нужно записать вместе с неудачным запуском.
Частые вопросы
Модуль random подходит для паролей?
Нет, он предназначен для моделирования и игр, а не криптографической защиты. Для секретов используют модуль secrets. Выбор генератора зависит от угроз, а не только от удобства API.