Модуль random на примерах — Изучение методов генерации случайных данных (Часть 1)

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

Что такое модуль random Python?

С помощью него разработчик может получить псевдослучайные числа для целого спектра распределений. Он позволяет получить как целочисленные значения, так и десятичные дроби. 

Сгенерировать по-настоящему случайное число не представляется возможным, поскольку все равно оно будет вписываться в определенную закономерность. Тем не менее, есть возможность получить псевдослучайное значение, которое генерируется по очень сложной логике, отследить которую тяжело. Дальше под понятием «случайное число» будем подразумевать именно псевдослучайное значение.

Для начала следует выполнить импорт модуля. 

import random

А вот пример, как применяется сам модуль random

import random




print("Вывод случайного числа при помощи использования random.random()")

print(random.random())

После того, как запустить эти строки, получим следующий результат в консоли. 

Вывод случайного числа при помощи использования random.random()

0.9461613475266107

Конечно, у вас получится другое число. Немного разъяснений этого кода:

  • random() – это базовая функция для модуля random().
  • Практически каждая функция, входящая в этот модуль, зависима от базовой функции random().
  • random() возвращает случайное число с плавающей точкой, которое находится между 0 и 1. 

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

Генерация псевдослучайных числовых значений в Python

Генерация случайного числового значения – это самая популярная задача, выполнение которой требуется от модуля random. Чтобы получить псевдослучайное значение, необходимо использовать функцию randint() либо randrange().

Мы попробуем получить случайное число, которое будет находиться в диапазоне между 0 и 9. 

from random import randint

 

 

print("Вывод случайного целого числа ", randint(0, 9))

print("Вывод случайного целого числа ", randrange(0, 10, 2))




После запуска кода мы получим следующий результат.




Вывод случайного целого числа 5

Вывод случайного целого числа 2

Выбор случайного элемента из списка

Конечно, генерация случайного значения не ограничивается исключительно числами. Это может быть, например, случайный объект из списка.

Допустим, нужно получить случайный город из списка городов. Для этого можно использовать следующий код. 

import random

 

 

city_list = ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Philadelphia']

print("Выбор случайного города из списка - ", random.choice(city_list))

В результате выполнения этого кода мы получаем следующий результат:

Выбор случайного города из списка — Houston

Python функции модуля random

Теперь давайте рассмотрим весь спектр функций этого модуля, которые могут использоваться в Python.

Генерация случайного целого числа

Как говорилось ранее, за это отвечает функция randint(a,b). Ее особенности:

  • Возвращает случайное число целочисленного формата между a и b.
  • randint(a,b) не работает со значениями с плавающей точкой и другими числами, кроме относящихся к ряду целых чисел.
  • Каждый из аргументов, передаваемых этой функции, обязательный для использования.
  • Случайное число, которое получено в результате выполнения этой функции, всегда будет больше или равно a или меньше или равно b.

Приведем еще один пример кода, где задействуется функция random.randint()

import random

 

 

print("Использование random.randint() для генерации случайного целого числа")

print(random.randint(0, 5))

print(random.randint(0, 5))

После выполнения этого кода получаем такой результат:

Использование random.randint() для генерации случайного целого числа 

4

2

Генерация случайного целого числа в пределах заданного промежутка

За это отвечает функция randrange(). Она во многом аналогична предыдущей, но спектр возможностей расширен. Так, можно задать шаг, с которым будет получаться определенный числовой результат. Значение по умолчанию – 1.

Используется три аргумента:

  1. Первое число диапазона.
  2. Второе число диапазона.
  3. Шаг.

Чтобы стало понятнее, приведем код: 

import random

 

 

print("Генерация случайного числа в пределах заданного промежутка")

print(random.randrange(10, 50, 5))

print(random.randrange(10, 50, 5))

После запуска этого кода получим вывод, подобный этому:

Генерация случайного числа в пределах заданного промежутка 

10

15

Получение случайного объекта из списка

Для этого используется метод choice() объекта random. Если есть список значений, он может выбрать случайный элемент из него. Кроме списка может использоваться строка. В этом случае будет возвращено случайное число или буква.

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

import random

 

 

list = [55, 66, 77, 88, 99]

print("random.choice используется для выбора случайного элемента из списка - ", random.choice(list))

После запуска кода получаем следующий результат:

random.choice используется для выбора случайного элемента из списка — 55

Выбор нескольких элементов из заданной последовательности

Для этой цели используется метод random.sample(). Его особенности:

  1. Возвращает список уникальных элементов, которые были случайным образом отобраны из итерируемого объекта. Результирующее значение количества элементов напрямую зависит от k.
  2. Число из последовательности, из которой отбираются значения, могут быть представлены в форме списка либо другой последовательности.

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

import random

 

 

list = [2, 5, 8, 9, 12]

print ("random.sample() ", random.sample(list,3))

В результате получаем следующий вывод:

random.sample() [5, 12, 2]

Получение нескольких элементов итерируемого объекта (включая тот же элемент)

За это отвечает функция random.choices со следующим синтаксисом: random.choices(population, weights=None, *, cum_weights=None, k=1)

Этот метод используется в тех случаях, когда надо отобрать несколько случайных элементов из последовательности. Он появился в Python 3.6. С его помощью возможно отобрать один и тот же элемент несколько раз.

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

import random

 

 

# Выборка с заменой

list = [20, 30, 40, 50 ,60, 70, 80, 90]

sampling = random.choices(list, k=5)

 

print("Выборка с методом choices ", sampling)

После запуска этого кода получаем следующий результат:

Выборка с методом choices [30, 20, 40, 50, 40]

Генерация псевдослучайных чисел с использованием метода seed()

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

import random

 

 

random.seed(6)

print("Случайное число с семенем ",random.random())

 

print("Случайное число с семенем ",random.random())

Вывод будет следующим:

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

Случайное число с семенем  0.793340083761663

Случайное число с семенем  0.793340083761663

Перемешивание данных

Если необходимо, например, написать приложение для карточной игры, то функция shuffle() будет очень кстати. С ее помощью можно случайным образом изменить последовательность значений. И пример с тасованием карт в колоде здесь очень органичен.

Работает этот метод следующим образом. 

list = [2, 5, 8, 9, 12]

 

 

random.shuffle(list)

print ("Вывод перемешанного списка ", list)

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

Вывод перемешанного списка  [8, 9, 2, 12, 5]

Генерация числа с плавающей точкой

С помощью функции uniform(), которая является методом объекта random приложение может генерировать число с плавающей точкой в определенном диапазоне.

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

Метод может, например, сгенерировать случайное действительное число в диапазоне 10.5 и 25.5.

Приведем пример использования этой функции: 

import random

 

 

print("Число с плавающей точкой в пределах заданного промежутка")

print(random.uniform(10.5, 25.5))

После запуска этого кода вывод будет следующим:

Число с плавающей точкой в пределах заданного промежутка 

22.095283175159786

Функция triangular

Если необходимо получить случайное число N с плавающей запятой, которое подпадает под критерий lower <= N <= upper, а также значение mode, которое является уточняющим.

По умолчанию нижний предел составляет 0, а верхний – единица. А пик аргумента установлен на середине. 

Метод random.triangular() позволяет добиться треугольного распределения вероятности при генерации псевдослучайного значения.

Приведем пример использования этой функции в Python: 

import random

 

 

print("Число с плавающей точкой через triangular")

print(random.triangular(10.5, 25.5, 5.5))

Вывод:

Число с плавающей точкой через triangular

16.7421565549115

Выводы

Таким образом, мы разобрались в основных аспектах того, как генерировать псевдослучайные значения. Конечно, генерация по-настоящему случайных чисел довольно трудная. Но для большинства задач псевдослучайных значений вполне достаточно. И это главное.

Вторая часть данного материала ⇒ по ссылке

ОфисГуру
Adblock
detector