Добавить в корзинуПозвонить
Найти в Дзене

Введение в модуль random

Модуль random предоставляет инструменты для работы с генерацией случайных чисел и выбором элементов из последовательностей. Он встроен в стандартную библиотеку Python и не требует установки дополнительных пакетов. import random
# простая генерация
r = random.random() # число в [0.0, 1.0)
i = random.randint(1, 10) # целое от 1 до 10
f = random.uniform(0, 5) # число с плавающей точкой в [0.0, 5.0]
# выбор элемента и перемешивание
items = ['яблоко', 'банан', 'вишня', 'апельсин']
print(random.choice(items))
random.shuffle(items)
print(items)
# выборка без повторений
sampled = random.sample(range(100), 5)
print(sampled)
# фиксирование сидов для воспроизводимости
random.seed(42)
print(random.random()) Чтобы воспроизводить результаты генерирования случайных чисел, можно устанавливать сид (seed). Модуль random — удобный и мощный инструмент для повседневных задач моделирования и игр на Python. Он прост в использовании, обладает широким набором функций и поддерживает воспрои
Оглавление

Модуль random предоставляет инструменты для работы с генерацией случайных чисел и выбором элементов из последовательностей. Он встроен в стандартную библиотеку Python и не требует установки дополнительных пакетов.

Что умеет Random

  • Генерация псевдослучайных чисел
  • Случайный выбор элементов из списков, строк и других коллекций
  • Перемешивание последовательностей
  • Распределения вероятностей (равномерное, нормальное и др.)
  • Контроль воспроизводимости через заданный сид (seed)

Основные функции

  • random() — возвращает число с плавающей точкой в диапазоне [0.0, 1.0).
  • randint(a, b) — возвращает целое число N, такое что a <= N <= b.
  • uniform(a, b) — возвращает число с плавающей точкой в диапазоне [a, b].
  • choice(seq) — возвращает случайный элемент из непустой последовательности.
  • shuffle(x, random=None) — перемешивает последовательность x на месте.
  • sample(population, k) — выборка из k элементов без повторений.
  • randrange(start, stop=None, step=1) — аналог range, но возвращает случайное значение.

Распределения и специальные функции

  • normalvariate(mu, sigma) — нормальное распределение с математическим ожиданием mu и дисперсией sigma.
  • lognormvariate(mu, sigma) — логнормальное распределение.
  • expovariate(lambd) — экспоненциальное распределение с параметром lambd.
  • triangular(low, high, mode) — треугольное распределение.
  • getrandbits(k) — возвращает целое число, имеющее ровно k бит.

Пример использования

import random

# простая генерация
r = random.random() # число в [0.0, 1.0)
i = random.randint(1, 10) # целое от 1 до 10
f = random.uniform(0, 5) # число с плавающей точкой в [0.0, 5.0]

# выбор элемента и перемешивание
items = ['яблоко', 'банан', 'вишня', 'апельсин']
print(random.choice(items))

random.shuffle(items)
print(items)

# выборка без повторений
sampled = random.sample(range(100), 5)
print(sampled)

# фиксирование сидов для воспроизводимости
random.seed(42)
print(random.random())

Контроль воспроизводимости

Чтобы воспроизводить результаты генерирования случайных чисел, можно устанавливать сид (seed).

  • random.seed(a=None, version=2) — устанавливает начальное состояние генератора.
  • Если передать одно и то же значение сидирования, последовательность случайных чисел будет повторяться.

Безопасность и производительность

  • Модуль random основан на линейном конгруэнтном генераторе и предназначен для моделирования случайных процессов, научных симуляций и игр. Он не подходит для криптографических задач.
  • Для криптографических целей следует использовать secrets и криптографически безопасные источники случайности.

Сравнение с альтернативами в стандартной библиотеке

  • random — общие задачи и моделирование.
  • secrets — безопасная генерация токенов и паролей.
  • numpy.random (часть NumPy) — более богатые возможности для числовых массивов и быстрые операции на больших наборах данных.

Практические советы

  • Всегда устанавливайте сид, если хотите воспроизводимость тестов.
  • Используйте choice и sample для безопасной работы с коллекциями без повторений.
  • Для больших объемов данных и числовых вычислений рассмотрите интеграцию с NumPy.

Заключение

Модуль random — удобный и мощный инструмент для повседневных задач моделирования и игр на Python. Он прост в использовании, обладает широким набором функций и поддерживает воспроизводимость через сиды. Однако для криптографии следует предпочесть специализированные модули, такие как secrets.