Модуль random в Python

Модуль random в Python: описание и примеры основных функций для генерации случайных чисел

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

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

Где используется

  • Игры и развлечения. Часто игры требуют случайного выбора элементов, будь то бросок кубика или выбор случайного противника.
  • Научные исследования. При проведении статистических экспериментов или моделировании явлений иногда требуется генерировать случайные данные или производить случайную выборку.
  • Криптография. Хотя для криптографических приложений рекомендуется использовать другие, более безопасные методы генерации случайных чисел, модуль random может быть использован в учебных целях или для менее критичных задач.
  • Машинное обучение. При разделении данных на обучающие и тестовые выборки, а также при других задачах, связанных с обработкой данных, часто требуются случайные операции.

Как установить и импортировать

На самом деле, модуль random является частью стандартной библиотеки Python, так что вам не нужно устанавливать его отдельно.

Чтобы начать работать с модулем, вы просто импортируете его:

import random

После этого все функции и методы модуля становятся доступными для использования в вашем коде.

Основные функции для генерации случайных чисел

  • random() - возвращает следующее случайное вещественное число в диапазоне от 0.0 до 1.0 (не включая 1).
print(random.random())
  • randint(a, b) - генерирует случайное целое число в диапазоне от a до b включительно.
print(random.randint(1, 10))
  • randrange(start, stop, step) - возвращает случайное целое число в диапазоне от start до stop (не включая stop) с заданным шагом step.
print(random.randrange(10))          # число от 0 до 9
print(random.randrange(5, 50, 5))    # число из [5, 10, 15, ... 45]
  • uniform(a, b) - возвращает случайное вещественное число между a и b.
print(random.uniform(1.5, 2.5))

Работа с последовательностями

Рассмотрим основные функции модуля, которые позволяют манипулировать и выбирать случайные элементы из последовательностей.

  • choice(seq) - эта функция возвращает случайный элемент из предоставленной последовательности.
fruits = ["яблоко", "банан", "черешня", "дыня"]
print(random.choice(fruits))
  • choices(population, weights=None, *, cum_weights=None, k=1)  - возвращает список из k элементов, выбранных случайным образом из population. Параметр weights указывает вероятности выбора каждого элемента из population..
fruits = ["яблоко", "банан", "черешня", "дыня"]
print(random.choices(fruits, k=2))
print(random.choices(fruits, weights=[10, 1, 1, 1], k=2))
  • shuffle(seq) - перемешивает элементы последовательности на месте. Обратите внимание, что эта функция возвращает None и изменяет исходный список.
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers)
  • sample(population, k) - возвращает список длиной k из уникальных элементов, случайно выбранных из population.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(random.sample(numbers, 5))

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

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

  • gauss(mu, sigma) - генерирует случайное число, следующее нормальному (гауссовому) распределению с математическим ожиданием mu и стандартным отклонением sigma.
print(random.gauss(0, 1))  # Нормальное распределение со средним 0 и стандартным отклонением 1
  • betavariate(alpha, beta) - генерирует случайное число, следующее бета-распределению с параметрами alpha и beta.
print(random.betavariate(2, 5))
  • expovariate(lambd) - генерирует случайное число, следующее экспоненциальному распределению, где lambd равен 1 деленное на математическое ожидание.
print(random.expovariate(1/5))  # Математическое ожидание равно 5
  • gammavariate(alpha, beta) - генерирует случайное число, следующее гамма-распределению с параметрами alpha и beta.
print(random.gammavariate(1, 1))
  • paretovariate(alpha) - генерирует случайное число, следующее распределению Парето.
print(random.paretovariate(5))
  • weibullvariate(alpha, beta) - генерирует случайное число, следующее распределению Вейбулла.
print(random.weibullvariate(1, 1))

Работа с псевдослучайными числами и seeding

Модуль random Python генерирует псевдослучайные числа, а не истинные случайные числа. Псевдослучайные числа генерируются алгоритмически и будут повторяться в идентичной последовательности при заданном начальном значении (seed). Сейчас мы рассмотрим, что такое "seeding" и как это работает в контексте модуля random.

Что такое Seed (начальное значение)

"Seed" или начальное значение — это число (или вектор чисел), который инициализирует генератор псевдослучайных чисел. Если генератор случайных чисел инициализирован одним и тем же начальным значением, он будет возвращать одну и ту же последовательность чисел.

Зачем это нужно

Использование начального значения полезно в различных ситуациях, таких как:

  1. Воспроизводимость: Научные эксперименты, симуляции и тесты часто требуют воспроизводимости результатов.
  2. Тестирование: При отладке и тестировании программы с предсказуемой последовательностью легче выявить проблемы.
  3. Игры: В некоторых играх, где игрок может начать сначала, предсказуемая "случайность" делает игру более справедливой.

Функция seed()

Модуль random предоставляет функцию seed(), которая позволяет устанавливать начальное значение.

import random

random.seed(10)
print(random.random())  # 0.5714025946899135

random.seed(10)
print(random.random())  # 0.5714025946899135

Обратите внимание, что при двух последовательных вызовах функции random.random() после установки одного и того же начального значения результаты были идентичными.

Если seed() вызывается без аргумента или с None в качестве аргумента, он будет использовать текущее время для инициализации генератора, что делает поведение случайным.

Заключение

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

Содержание: