Генериране на случайни десетични и цели числа в 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 могат да бъдат пропуснати. Ако те са пропуснати, старт=0 и стъпка=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 може да се фиксира семето на случайните числа и да се инициализира генераторът на случайни числа.

След инициализация с едно и също семе случайната стойност се генерира винаги по един и същи начин.

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