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

Генерация случайных чисел различными способами может быть невероятно полезным инструментом во многих областях. А Python позволяет очень легко генерировать случайные числа. Для этого он предоставляет модули random и numpy, включая функции randrange, randint, random и seed, которые мы и рассмотрим в этой статье. Также мы разберем функции для генерации равномерного и нормального распределений.

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

Оглавление

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

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

# Генерация случайного числа в диапазоне от 0 до 1
import random
print(random.random())

# Результат:
# 0.9853067530373302

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

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

Функция random() генерирует случайные числа с плавающей точкой в диапазоне от 0 до 1. Однако, бывают случаи, когда нужно сгенерировать случайное число в другом диапазоне. Для этого можно использовать функцию uniform(). Давайте посмотрим, как она работает:

# Генерация случайного числа в диапазоне между двумя значениями
import random
print(random.uniform(10, 20))

# Результат:
# 18.754091000858978

Как видите, случайное число находится в диапазоне между двумя числами (и может их включать).

Генерация случайных целых чисел

Библиотека random в Python позволяет так же легко генерировать и случайные значения целочисленного типа. Для этого используется функция randint(), которая принимает в качестве параметров два значения:

  • а – нижняя граница выбранного диапазона
  • b – его верхняя граница

Давайте посмотрим на конкретном примере, как генерировать случайное целочисленное значение:

# Генерация случайного целочисленного значения в Python
import random
print(random.randint(0,10))

# Результат:
# 6

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

В приведенном выше примере мы использовали диапазон от 0 до 10. Однако, если нам нужен другой диапазон, мы смело можем его указать.

Например, давайте сгенерируем случайное число в диапазоне от -100 до 100:

# Генерация случайного числа в заданном диапазоне
import random
print(random.randint(-100,100))

# Результат:
# -24

Генерация случайных чисел, кратных определенному числу

В этом разделе мы покажем, как генерировать случайные числа, чтобы они были кратны определенному числу. Например, мы хотим сгенерировать случайное число в диапазоне от 0 до 100, но так, чтобы оно было кратно 3.

Для этого используется функция randrange(). Давайте посмотрим на ее работу:

# Генерация случайного числа, кратного определенному числу
import random
print(random.randrange(0,100,3))

# Результат:
# 51

Важно заметить, что в данном случае само число 100 (верхний предел нашего диапазона) в диапазон не входит. Если мы хотим, чтобы оно все же входило, нужно увеличить верхнюю границу на 1, то есть функция примет следующий вид: randrange(0, 101, 3).

Генерация списка случайных чисел

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

Создание списка случайных чисел с плавающей точкой

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

В приведенных ниже примерах мы при помощи list comprehension создадим два списка: один со случайными числами типа float в диапазоне от 0 до 1, а второй – в другом диапазоне.

# Генерация случайных чисел с плавающей точкой в диапазоне от 0 до 1
import random

random_list = [random.random() for i in range(4)]
print(random_list)

# Результат:
# [0.5581711161676459, 0.12711142718586899, 0.766167958409145, 0.16922239303028397]

Давайте разберем данный код. В переменной random_list мы создали новый список при помощи генератора списков Python. Для создания случайных чисел внутри генератора списка четыре раза вызывалась функция random().

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

# Генерация списка случайных чисел с плавающей точкой в диапазоне от 10 до 30
import random

random_list = [random.uniform(10, 30) for i in range(4)]
print(random_list)

# Результат: [17.8132149201385, 25.11003157219303, 10.68442113276928, 24.26692625415757]

Создание списка случайных целых чисел

Аналогично можно сгенерировать список случайных целых чисел. Для этого мы создадим генератор списка, который будет несколько раз вызывать функцию random.randint(). Давайте посмотрим, как можно создать список из 5 случайных целых чисел в диапазоне от 50 до 100:

# Генерация списка случайных целых чисел в Python
import random

random_list = [random.randint(50, 100) for i in range(5)]
print(random_list)

# Результат:
# [79, 66, 55, 69, 73]

Создание списка случайных целых чисел без повторений

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

В качестве аргументов данная функция принимает функцию range(), которая задает требуемый диапазон, а также количество элементов списка, которые мы хотим получить. Например, мы хотим получить список из пяти случайных целых чисел без повторений в диапазоне от 0 до 15. Тогда код будет иметь следующий вид:

# Создание списка случайных целых чисел без повторений
import random

random_list = random.sample(range(0, 16), k=5)
print(random_list)

# Результат:
# [2, 6, 14, 9, 12]

Генерация случайных чисел, имеющих нормальное распределение

Библиотека random также позволяет выбрать случайное число, которое будет соответствовать нормальному распределению Гаусса. Для этого нужно использовать функцию gauss(), которая в качестве аргументов принимает значения математического ожидания и дисперсии.

Давайте, например, сгенерируем случайное число с математическим ожиданием 10 и дисперсией 1:

# Генерация случайной величины, имеющей гауссово распределение
import random

random_gaussian = random.gauss(10, 1)
print(random_gaussian)

# Результат:
# 10.202050547919738

Библиотека random также содержит полезные способы генерации случайных чисел, имеющих другие типы распределений:

  • бета-распределение: random.betavariate()
  • экспоненциальное распределение: random.expovariate()
  • гамма-распределение: random.gammavariate()
  • Гауссово (нормальное) распределение: random.gauss() и random.normalvariate()
  • логарифм нормального распределения: random.lognormvariate()

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

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

Давайте посмотрим, как это работает:

# Создание воспроизводимых результатов генерации случайных чисел
import random

random.seed(100)
print(random.random())

# Результат:
# 0.1456692551041303

Здесь мы импортируем библиотеку random. Затем вызываем функцию random.seed, установив начальное значение seed равным 100. После этого генерируем и выводим на экран случайное число. Если мы запустим этот код снова, будет выведено точно такое же число.

Заключение

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

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

Перевод статьи “Generate Random Numbers in Python”.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *