Генерация случайных десятичных и целых чисел в Python, включая random(), randrange() и randint()

Бизнес

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

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

Здесь представлена следующая информация.

  • random.random()(Число с плавающей точкой между 0,0 и 1,0)
  • random.uniform()(Любой диапазон чисел с плавающей точкой)
  • Генерировать случайные числа, соответствующие нормальному распределению, гауссовскому распределению и т.д.
  • random.randrange()(Целое число произвольного диапазона и шага)
  • random.randint()(Целое число в любом диапазоне)
  • Генерация списка со случайными числами в качестве элементов
    • Список случайных чисел с плавающей точкой
    • Список целочисленных случайных чисел
  • Инициализировать генератор случайных чисел (зафиксировать затравку случайного числа)

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

random.random() (Число с плавающей точкой между 0,0 и 1,0)

Функция random() модуля random генерирует случайное число с плавающей точкой типа float, которое находится в диапазоне от 0.0 до 1.0.

import random

print(random.random())
# 0.4496839011176701

random.uniform() (Любой диапазон чисел с плавающей точкой)

uniform(a, b)Функции этого модуля случайных чисел генерируют случайные числа типа float с плавающей точкой в любом из следующих диапазонов

  • a <= n <= b
  • b <= n <= a
import random

print(random.uniform(100, 200))
# 175.26585048238275

Два аргумента могут быть либо больше, либо меньше; если они равны, то, естественно, возвращается только это значение. Возвращаемое значение всегда является float.

print(random.uniform(100, -100))
# -27.82338731501028

print(random.uniform(100, 100))
# 100.0

Аргумент также может быть указан как float.

print(random.uniform(1.234, 5.637))
# 2.606743596829249

Входит ли значение b в диапазон, зависит от последующего округления, как указано в документации.
a + (b-a) * random.random()

Находится ли значение конечной точки b в диапазоне или нет, зависит от округления с плавающей точкой в следующем уравнении
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

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

Приведенные выше функции random() и uniform() генерируют равномерно распределенные случайные числа, но существуют также функции для генерации чисел с плавающей точкой, которые следуют следующему распределению.

  • бета-распределение:random.betavariate()
  • экспоненциальное распределение:random.expovariate()
  • гамма-распределение:random.gammavariate()
  • Гауссовское распределение:random.gauss()
  • логнормальное распределение:random.lognormvariate()
  • нормальное распределение:random.normalvariate()
  • распределение фон Мизеса:random.vonmisesvariate()
  • Распределение Парето:random.paretovariate()
  • Распределение Вейбулла:random.weibullvariate()

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

random.randrange() (Целое число произвольного диапазона и шага)

randrange(start, stop, step)
Функция этого модуля random возвращает случайно выбранный элемент из следующих элементов.
range(start, stop, step)

Как и в range(), аргументы start и step могут быть опущены. Если они опущены, то start=0 и step=1.

import random

print(list(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(random.randrange(10))
# 5

Аргумент step может быть установлен для генерации четного или нечетного случайного целого числа, или случайного целого числа, кратного трем.

Например, если начало четное, а шаг=2, то случайным образом могут быть получены только четные целые числа в диапазоне.

print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]

print(random.randrange(10, 20, 2))
# 18

random.randint() (Целое число в любом диапазоне)

randint(a, b)
Функция этого модуля random возвращает следующее случайное целое число int.
a <= n <= b
randrange(a, b + 1)Эквивалентно этому; обратите внимание, что значение b также включено в диапазон.

print(random.randint(50, 100))
# print(random.randrange(50, 101))
# 74

Генерация списка со случайными числами в качестве элементов

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

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

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

import random

print([random.random() for i in range(5)])
# [0.5518201298350598, 0.3476911314933616, 0.8463426180468342, 0.8949046353303931, 0.40822657702632625]

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

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

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

print([random.randint(0, 10) for i in range(5)])
# [8, 5, 7, 10, 7]

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

print(random.sample(range(10), k=5))
# [6, 4, 3, 7, 5]

print(random.sample(range(100, 200, 10), k=5))
# [130, 190, 140, 150, 170]

Для получения дополнительной информации о random.sample(), пожалуйста, обратитесь к следующей статье.

Инициализировать генератор случайных чисел (зафиксировать затравку случайного числа)

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

После инициализации одним и тем же зерном случайная величина всегда генерируется одним и тем же способом.

random.seed(0)
print(random.random())
# 0.8444218515250481

print(random.random())
# 0.7579544029403025

random.seed(0)
print(random.random())
# 0.8444218515250481

print(random.random())
# 0.7579544029403025
Copied title and URL