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

Руководство по работе с модулем random в Python

Модуль random в Python предоставляет инструменты для генерации псевдослучайных чисел, выбора случайных элементов и работы с вероятностными распределениями. Это незаменимый инструмент для задач статистики, игр, симуляций, криптографии (с осторожностью!) и машинного обучения. Рассмотрим его функционал детально. - random(): Возвращает float в диапазоне [0.0, 1.0). import random print(random.random()) # Пример: 0.548813502 - uniform(a, b): Равномерное распределение на отрезке [a, b]. print(random.uniform(5, 10)) # 7.385247 - randint(a, b): Целое число в диапазоне [a, b] (включительно). print(random.randint(1, 6)) # Случайная игральная кость: 4 - randrange(start, stop, step): Аналог range(), но со случайным выбором. print(random.randrange(0, 100, 5)) # Кратное 5: 45 - choice(seq): Случайный элемент последовательности. items = ['яблоко', 'банан', 'вишня'] print(random.choice(items)) # 'банан' - choices(seq, weights, k): Выбор k элементов с учетом весов (с повторением). print(random.choi
Оглавление

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

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

- random(): Возвращает float в диапазоне [0.0, 1.0).

import random
print(random.random()) # Пример: 0.548813502

- uniform(a, b): Равномерное распределение на отрезке [a, b].

print(random.uniform(5, 10)) # 7.385247

- randint(a, b): Целое число в диапазоне [a, b] (включительно).

print(random.randint(1, 6)) # Случайная игральная кость: 4

- randrange(start, stop, step): Аналог range(), но со случайным выбором.

print(random.randrange(0, 100, 5)) # Кратное 5: 45

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

- choice(seq): Случайный элемент последовательности.

items = ['яблоко', 'банан', 'вишня']
print(random.choice(items)) # 'банан'

- choices(seq, weights, k): Выбор k элементов с учетом весов (с повторением).

print(random.choices([1, 2, 3], weights=[0.1, 0.8, 0.1], k=5))
# [2, 2, 2, 1, 2] (чаще выбирается 2)

- sample(seq, k): Уникальные элементы (без повторений).

print(random.sample(range(100), k=5)) # [42, 15, 73, 88, 31]

- shuffle(seq): Перемешивание списка на месте.

cards = ['Туз', 'Король', 'Дама']
random.shuffle(cards)
print(cards) # ['Дама', 'Туз', 'Король']

3. Генерация по распределениям

- gauss(mu, sigma): Нормальное распределение.

print(random.gauss(0, 1)) # Пример: -0.124934

- expovariate(lambda): Экспоненциальное распределение.

print(random.expovariate(1.5)) # Для моделирования времени ожидания

- betavariate(alpha, beta), gammavariate(alpha, beta), weibullvariate(alpha, beta): Специализированные распределения для статистики.

4. Управление генератором: Семена (seeds)

Для воспроизводимости результатов задайте начальное значение (seed):

random.seed(42) # Фиксирует последовательность случайных чисел
print(random.randint(0, 100)) # Всегда 81 при seed=42

Важно: Псевдослучайные числа не подходят для криптографии! Используйте secrets.

5. Практические примеры

a) Генератор паролей:

import string
symbols = string.ascii_letters + string.digits + '!@#$%'
password = ''.join(random.choices(symbols, k=12))
print(password) # 'x!3aBq8$zL2K'

b) Моделирование броска монеты:

result = 'Орёл' if random.random() > 0.5 else 'Решка'

c) Выбор случайной даты:

from datetime import datetime, timedelta
start = datetime(2023, 1, 1)
end = datetime(2023, 12, 31)
random_date = start + timedelta(days=random.randint(0, 365))

d) Монте-Карло интегрирование:

def monte_carlo_pi(n):
....points_inside = 0
....for _ in range(n):
........x, y = random.random(), random.random()
........if x**2 + y**2 <= 1:
............points_inside += 1
....return 4 * points_inside / n
print(monte_carlo_pi(100000)) # 3.14108

6. Ограничения и предостережения

- Детерминизм: Генератор зависит от seed. Не используйте для безопасности.

- Распределения: Убедитесь, что выбрали правильное распределение для задачи.

- Производительность: Для больших k в sample предпочтительнее numpy.random.

7. Альтернативы

- numpy.random: Быстрая генерация массивов (виды распределений: normal, poisson).

- secrets: Криптографически безопасные операции (токены, пароли).

import secrets
print(secrets.token_hex(16)) # 'a3f8d7...'

Заключение

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

Подписывайтесь:

Телеграм https://t.me/lets_go_code
Канал "Просто о программировании"
https://dzen.ru/lets_go_code