Генерування випадкових десяткових та цілих чисел у 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)
Функція цього випадкового модуля повертає випадково вибраний елемент із наступних елементів.
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

Крок аргументу можна налаштувати на створення парного чи непарного випадкового цілого чи випадкового цілого числа, кратного трьом.

Наприклад, якщо початок є парним і крок=2, лише парні цілі числа в діапазоні можна отримати випадковим чином.

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

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

random.randint()(Ціле число в будь-якому діапазоні)

randint(a, b)
Функція цього випадкового модуля повертає наступне випадкове ціле число 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.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