
In Python, puoi generare numeri pseudo-casuali (numeri in virgola mobile float e interi int) con random(), randrange(), randint(), uniform(), ecc. nel modulo casuale.
Il modulo random è incluso nella libreria standard, quindi non è richiesta alcuna installazione aggiuntiva.
In questo articolo vengono descritti i seguenti contenuti.
- random.random(): 0.0 <= float < 1.0
- random.uniform():
float in given range
- Genera numeri casuali per varie distribuzioni (gaussiana, gamma, ecc.)
- random.randrange():
int in given range and step
- random.randint():
int in given range
- Genera un elenco di numeri casuali
- random.seed(): inizializza il generatore di numeri casuali
Vedere il seguente articolo su come campionare o mescolare gli elementi di un elenco in modo casuale.
random.random(): 0.0 <= float < 1.0
random.random() genera un numero a virgola mobile casuale nell’intervallo 0,0 <= n < 1,0.
import random
print(random.random())
# 0.4496839011176701
random.uniform():float in given range
random.uniform(a, b) genera un numero in virgola mobile casuale nell’intervallo a <= n <= bo b <= n <= a.
import random
print(random.uniform(100, 200))
# 175.26585048238275
I due argomenti possono essere più grandi o più piccoli. Se sono uguali, viene restituito solo quel valore.
print(random.uniform(100, -100))
# -27.82338731501028
print(random.uniform(100, 100))
# 100.0
L’argomento può anche essere specificato come float.
print(random.uniform(1.234, 5.637))
# 2.606743596829249
Come documentato, se il valore di b è incluso nell’intervallo dipende dall’equazione di arrotondamento a + (ba) * random.random().
Il valore del punto finale b può essere incluso o meno nell’intervallo a seconda dell’arrotondamento in virgola mobile nell’equazione a + (ba) * random().
random.uniform() — Genera numeri pseudo-casuali — Documentazione Python 3.9.7
Genera numeri casuali per varie distribuzioni (gaussiana, gamma, ecc.)
Se i precedenti random() e uniform() generino numeri casuali per una distribuzione uniforme, vengono fornite anche funzioni da generare per varie distribuzioni.
- Distribuzione beta:
random.betavariate()
- Distribuzione esponenziale:
random.expovariate()
- Distribuzione gamma:
random.gammavariate()
- Distribuzione gaussiana:
random.gauss()
- Log distribuzione normale:
random.lognormvariate()
- Distribuzione normale:
random.normalvariate()
- distribuzione di Mises:
random.vonmisesvariate()
- Distribuzione paretiana:
random.paretovariate()
- Distribuzione Weibull:
random.weibullvariate()
Consulta la documentazione ufficiale per ulteriori informazioni su ciascuna distribuzione.
random.randrange():int in given range and step
random.randrange(start, stop, step) restituisce un intero casuale int in range(start, stop, step).
Come con range(), start e step possono essere omessi. Se omesso, start=0 e step=1.
import random
print(list(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(random.randrange(10))
# 5
È possibile generare un numero intero casuale pari o dispari oppure un numero intero casuale multiplo di qualsiasi numero intero. Ad esempio, se start è pari e step=2, viene generato casualmente solo un numero intero pari nell’intervallo.
print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]
print(random.randrange(10, 20, 2))
# 18
random.randint():int in given range
random.randint(a, b) restituisce un intero casuale int in a <= n <= b. Equivale a random..randrange(a, b + 1). Si noti che il valore di b può essere generato.
print(random.randint(50, 100))
# print(random.randrange(50, 101))
# 74
Genera un elenco di numeri casuali
Elenco di float casuale
Per generare un elenco di numeri in virgola mobile casuali, utilizzare random(), uniform(), ecc. con la comprensione degli elenchi.
import random
print([random.random() for i in range(5)])
# [0.5518201298350598, 0.3476911314933616, 0.8463426180468342, 0.8949046353303931, 0.40822657702632625]
Vedere l’articolo seguente per ulteriori informazioni sulla comprensione degli elenchi.
Elenco di int. casuali
Quando si genera un elenco di numeri interi casuali, l’utilizzo di randrange() o randint() con la comprensione dell’elenco può contenere valori duplicati.
print([random.randint(0, 10) for i in range(5)])
# [8, 5, 7, 10, 7]
Se vuoi creare un elenco di numeri interi casuali senza duplicazione, campionario gli elementi di range() con 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]
Vedere il seguente articolo per ulteriori informazioni su random.sample().
random.seed(): inizializza il generatore di numeri casuali
Puoi inizializzare un generatore di numeri casuali con random.seed().
Dopo l’inizializzazione con lo stesso seme, il numero casuale viene generato allo stesso modo.
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