Генерисање насумичних децимала и целих бројева у Питхон-у, укључујући рандом(), рандранге() и рандинт()

Бусинесс

Насумични бројеви се могу генерисати коришћењем функција рандом(), униформ(), ранданге() и рандинт() у модулу рандом стандардне библиотеке Питхон.

Насумични модул је укључен у стандардну библиотеку, тако да није потребна додатна инсталација. Наравно, морате га увести.

Овде се налазе следеће информације.

  • random.random()(Број са помичним зарезом између 0,0 и 1,0)
  • random.uniform()(Било који опсег бројева са покретним зарезом)
  • Генеришите насумичне бројеве који прате нормалну дистрибуцију, Гаусову расподелу итд.
  • random.randrange()(Цео број произвољног опсега и корака)
  • random.randint()(Цео број у било ком опсегу)
  • Генерисање листе са случајним бројевима као елементима
    • Листа насумичних бројева са покретним зарезом
    • Листа целих случајних бројева
  • Иницијализујте генератор случајних бројева (поправите семе насумичних бројева)

Погледајте следећи чланак о томе како да насумично издвојите или сортирате елементе листе.

random.random()(Број са помичним зарезом између 0,0 и 1,0)

Функција рандом модула рандом() генерише насумични број са помичним зарезом типа флоат који је између 0,0 и 1,0.

import random

print(random.random())
# 0.4496839011176701

random.uniform()(Било који опсег бројева са покретним зарезом)

uniform(a, b)Функције овог насумичног модула генеришу случајне бројеве са плутајућим бројем у било ком од следећих опсега

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

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

Два аргумента могу бити или већи или мањи; ако су једнаки, природно ће вратити само ту вредност. Повратна вредност је увек флоат.

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

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

Аргумент се такође може навести као флоат.

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

Да ли је вредност б укључена у опсег зависи од следећег заокруживања, као што је документовано.
a + (b-a) * random.random()

Да ли је вредност крајње тачке б у опсегу или не зависи од заокруживања са плутајућим зарезом у следећој једначини
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Генеришите насумичне бројеве који прате нормалну дистрибуцију, Гаусову расподелу итд.

Горе наведене функције рандом() и униформ() генеришу равномерно распоређене случајне бројеве, али постоје и функције за генерисање бројева са покретним зарезом које прате следећу дистрибуцију.

  • бета дистрибуција: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)

Као и код ранге(), аргументи старт и степ могу бити изостављени. Ако су изостављени, старт=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)
Функција овог случајног модула враћа следећи случајни цео број инт.
a <= n <= b
randrange(a, b + 1)Еквивалентно овоме; имајте на уму да је вредност б такође укључена у опсег.

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

Генерисање листе са случајним бројевима као елементима

У овом одељку ћемо објаснити како да користите насумични модул стандардне библиотеке за генерисање листе са случајним бројевима као елементима.

Листа насумичних бројева са плутајућим зарезом

Да бисте генерисали листу чији су елементи случајни бројеви са покретним зарезом, комбинујте функције рандом() и униформ() са нотацијом за разумевање листе.

import random

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

У примеру изнад, користи се ранге(), али листе и торке су такође могуће за жељени број елемената. За више детаља о разумевању листе, погледајте следећи чланак.

Листа интегер инт случајних бројева

Приликом генерисања листе чији су елементи цеобројни насумични бројеви, комбиновање горњих ранданге() и рандинт() са нотацијом разумевања листе може довести до дуплих вредности.

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

Ако желите да направите насумични низ целих бројева без дуплирања, издвојите елементе ранге() са произвољним опсегом користећи рандом.сампле().

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.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