Generarea de zecimale și numere întregi aleatorii în Python, inclusiv random(), randrange() și randint()

Afaceri

Numerele aleatoare pot fi generate cu ajutorul funcțiilor random(), uniform(), randange() și randint() din modulul random al bibliotecii standard Python.

Modulul random este inclus în biblioteca standard, deci nu este necesară nicio instalare suplimentară. Bineînțeles, trebuie să-l importați.

Aici sunt furnizate următoarele informații.

  • random.random()(Număr în virgulă mobilă între 0,0 și 1,0)
  • random.uniform()(Orice interval de numere în virgulă mobilă)
  • Generarea de numere aleatoare care urmează o distribuție normală, gaussiană etc.
  • random.randrange()(Număr întreg cu interval și pas arbitrar)
  • random.randint()(Un număr întreg în orice interval)
  • Generarea unei liste cu numere aleatoare ca elemente
    • Listă de numere aleatorii în virgulă mobilă
    • Listă de numere întregi aleatoare
  • Inițializarea generatorului de numere aleatoare (fixați sămânța de numere aleatoare)

Consultați următorul articol despre cum să extrageți sau să sortați aleatoriu elementele unei liste.

random.random() (Număr în virgulă mobilă între 0,0 și 1,0)

Funcția random() a modulului random generează un număr aleatoriu în virgulă mobilă de tip float, cuprins între 0,0 și 1,0.

import random

print(random.random())
# 0.4496839011176701

random.uniform() (Orice interval de numere în virgulă mobilă)

uniform(a, b)Funcțiile acestui modul aleator generează numere aleatoare de tip float în virgulă mobilă în oricare dintre următoarele intervale

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

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

Cele două argumente pot fi fie mai mari, fie mai mici; dacă sunt egale, în mod natural, vor returna doar această valoare. Valoarea returnată este întotdeauna un float.

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

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

Argumentul poate fi, de asemenea, specificat sub formă de float.

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

Dacă valoarea lui b este inclusă în interval depinde de următoarea rotunjire, așa cum este documentată.
a + (b-a) * random.random()

Dacă valoarea punctului final b se află sau nu în interval depinde de rotunjirea în virgulă mobilă din următoarea ecuație
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Generarea de numere aleatoare care urmează o distribuție normală, gaussiană etc.

Funcțiile random() și uniform() de mai sus generează numere aleatoare distribuite uniform, dar există, de asemenea, funcții pentru a genera numere cu virgulă mobilă care urmează următoarea distribuție.

  • distribuție beta:random.betavariate()
  • distribuție exponențială:random.expovariate()
  • distribuție gamma:random.gammavariate()
  • Distribuție gaussiană:random.gauss()
  • distribuție lognormală:random.lognormvariate()
  • distribuție normală:random.normalvariate()
  • Distribuția Von Mises:random.vonmisesvariate()
  • Distribuția Pareto:random.paretovariate()
  • Distribuția Weibull:random.weibullvariate()

Parametrii fiecărei distribuții sunt specificați prin argumente. Pentru detalii, consultați documentația oficială.

random.randrange() (Număr întreg cu interval și pas arbitrar)

randrange(start, stop, step)
Funcția acestui modul aleatoriu returnează un element selectat aleatoriu din următoarele elemente.
range(start, stop, step)

Ca și în cazul range(), argumentele start și step pot fi omise. Dacă sunt omise, start=0 și step=1.

import random

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

print(random.randrange(10))
# 5

Argumentul step poate fi setat pentru a genera un număr întreg aleatoriu par sau impar sau un număr întreg aleatoriu care este un multiplu de trei.

De exemplu, dacă startul este par și pasul=2, se pot obține aleatoriu numai numere întregi pare din interval.

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

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

random.randint() (Un număr întreg în orice interval)

randint(a, b)
Funcția acestui modul aleatoriu returnează următorul număr întreg aleatoriu int.
a <= n <= b
randrange(a, b + 1)Echivalent cu aceasta; rețineți că valoarea lui b este, de asemenea, inclusă în interval.

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

Generarea unei liste cu numere aleatoare ca elemente

În această secțiune, vom explica cum să folosim modulul random al bibliotecii standard pentru a genera o listă cu numere aleatoare ca elemente.

Listă de numere aleatoare cu virgulă mobilă flotantă

Pentru a genera o listă ale cărei elemente sunt numere aleatoare în virgulă mobilă, combinați funcțiile random() și uniform() cu notația de înțelegere a listei.

import random

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

În exemplul de mai sus, se utilizează range(), dar sunt posibile și liste și tuple pentru numărul dorit de elemente. Pentru mai multe detalii despre înțelegerile de liste, consultați următorul articol.

Listă de numere aleatoare int întregi

Atunci când se generează o listă ale cărei elemente sunt numere aleatoare întregi, combinând randange() și randint() de mai sus cu notația de înțelegere a listei se pot obține valori duplicate.

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

Dacă doriți să realizați o secvență aleatorie de numere întregi fără dublare, extrageți elementele din range() cu un interval arbitrar folosind 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]

Pentru mai multe informații despre random.sample(), vă rugăm să consultați următorul articol.

Inițializarea generatorului de numere aleatoare (fixați sămânța de numere aleatoare)

Prin atribuirea unui număr întreg arbitrar funcției seed() a modulului random, se poate fixa sămânța de numere aleatoare și se poate inițializa generatorul de numere aleatoare.

După inițializarea cu aceeași sămânță, valoarea aleatorie este întotdeauna generată în același mod.

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