Элемент случайности: как использовать модуль random в Python

Сергій Бондаренко

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

Для некоторых задач нужно использовать элемент случайности. Например, вы решаете, кто из игроков будет ходить белыми шахматами, а кто — черными. Или же работаете над игрой, в которой случайным образом перемешиваются карты в колоде. Фактор случайности пригодится и при проведении розыгрыша с призами.

В этих и многих других случаях вам нужно сгенерировать случайную величину, которая бы предопределяла какое-то событие.

Компьютер не имеет воображения и «придумать» сам ничего не может. Но он может выполнить специальный алгоритм, имитирующий случайную генерацию.

В 1997 году  японские ученые Макото Мацумото и Такудзи Нисимура разработали математический алгоритм для генерации случайной величины, который называется вихрь Мерсенна. Хотя этот алгоритм не является криптостойким, он часто используется в программировании для решения простых задач, где вопрос безопасности не критичен.

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

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

Функции модуля random

Функция Описание
seed(A) Каждому сгенерированному числу соответствует свое зерно выборки A. Это некий параметр, по которому  модуль выбирает псевдослучайный результат. Если это зерно не указано, модуль использует значение системного времени. Если же одно и то же значение зерна указать в разных местах кода, вы получите один и тот же псевдослучайный результат.
getstate() Запоминает состояние генератора псевдослучайных величин, чтобы использовать впоследствии с функцией setstate().
setstate() Восстанавливает состояние генератора псевдослучайных величин.
randrange(A, B, C) Эта функция определяет случайное число, выбранное в заданном диапазоне от A до В с указанным шагом С. Функция может использоваться только с одним аргументом, в этом случае случайная величина будет генерироваться в «полуоткрытом» диапазоне от нуля (включительно) до значения этого аргумента (не включая это число).

Это можно записать также как [0, A). Если функция randrange содержит только два аргумента, она работает как randint, генерируя числа в полуоткрытом диапазоне [A, B).

randint(A, B) Функция, которая генерирует случайное целое число в заданном диапазоне от A до B.
choice(имя_списка) Функция, позволяющая сгенерировать случайный выбор из компонентов заранее описанного списка.
choices(имя_списка, A) Эта функция выбирает несколько (A) случайных элементов из списка.
shuffle(имя_списка) Функция дает возможность установить элементы списка в случайном порядке. Аргументом функции служит имя_списка.
sample(имя_списка, A) Используется для случайного выбора определенного количества элементов из списка, где A — число выбираемых элементов списка.
random() Одноименная функция модуля random для генерирования чисел с плавающей точкой в диапазоне от нуля до единицы, не включая единицу.
uniform(A, B) Функция, позволяющая получить число с плавающей запятой между числами A и B, где оба числа указаны с плавающей запятой, например, uniform(10.5, 25.5).
Функции, перечисленные ниже, применяются для решения узкоспециализированных задач, таких как статистические методы и теория вероятности
betavariate() Используется для получения случайного числа с плавающей запятой от 0 до 1 на основе бета-распределения (применяется для статистических расчетов).
expovariate()

 

Генерирует случайное число с плавающей запятой на основе экспоненциального распределения (используется в статистике).
gammavariate() Функция создает случайное число с плавающей запятой на основе гамма-распределения (используется для программирования со статистическими методами).
gauss() Генерирует случайное число с плавающей запятой на основе распределения Гаусса (используется в теории вероятности).
lognormvariate() Генерирует случайное число с плавающей запятой на основе логнормального распределения (используется в задачах, связанных с теорией вероятности).
normalvariate() Функция генерирует случайное число с плавающей запятой на основе нормального распределения (используется в задачах по теории вероятности).
vonmisesvariate() Создает случайное число с плавающей запятой на основе распределения фон Мизеса (используется в направленной статистике).
paretovariate() Генерирует случайное число с плавающей запятой на основе распределения Парето (используется в теориях вероятности).
weibullvariate() Генерирует случайное число с плавающей запятой на основе распределения Вейбулла (используется в статистике).

Генерация случайных чисел: примеры использования

Составление плей-листа

Предположим, что у нас есть список музыкальных исполнителей (myplaylist) и нам нужно выбрать всего три наименования:

import random #подключаем модуль псевдослучайных функций Python

myplaylist = ["Pink Floyd", "Santana", "The Beatles", "ELO", "Mark Knopfler", "KennyG", "Bob Dylan"]    #описание плей-листа

print(random.sample(myplaylist, k=3)) #случайных выбор трех позиций списка и вывод результата на экран

Случайное воспроизведение

В любом плеере есть функция случайного воспроизведения. Попробуем реализовать это с помощью Python, перемешивая треки в заранее составленном плей-листе:

import random #подключаем модуль псевдослучайных функций Python

myplaylist = ["Pink Floyd", "Santana", "The Beatles", "ELO", "Mark Knopfler", "KennyG", "Bob Dylan"]  #описание плей-листа

random.shuffle(myplaylist) #перемешиваем список

print(myplaylist) #вывод результата на экран

Несколько случайных чисел в заданном диапазоне

Представим, что нам нужно получить семь раз случайное число в диапазоне от трех до девяти:

import random  #подключаем модуль псевдослучайных функций Python

for i in range(7): #создаем цикл на семь повторений

print(random.randint(3, 9)) #вывод результата

Победитель розыгрыша

Представим, что нам нужно выбрать случайным образом победителя розыгрыша из списка. С Python это очень удобно реализуется:

import random #подключаем модуль псевдослучайных функций Python

members = ["Василий", "Евгений", "Олег", "София", "Инна", "Василиса", "Петр"] #описание списка участников

print(random.choice(members)) #выбор и вывод имени победителя на экран

Случайное дробное число в нужном диапазоне

Представим, что нам нужно получить случайное дробное число в диапазоне от 20 до 40:

import random #подключаем модуль псевдослучайных функций Python

print(random.uniform(20, 40)) #выбор случайного числа и вывод на экран

 

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023