ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Модули 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.

Источники