Generare decimali e interi casuali in Python, incluso random(), randrange() e randint()

Attività commerciale

I numeri casuali possono essere generati usando le funzioni random(), uniform(), randange() e randint() nel modulo random della libreria standard Python.

Il modulo casuale è incluso nella libreria standard, quindi non è richiesta alcuna installazione aggiuntiva. Naturalmente, è necessario importarlo.

Le seguenti informazioni sono fornite qui.

  • random.random()(Numero in virgola mobile tra 0,0 e 1,0)
  • random.uniform()(Qualsiasi gamma di numeri in virgola mobile)
  • Genera numeri casuali che seguono una distribuzione normale, gaussiana, ecc.
  • random.randrange()(Intero di intervallo e passo arbitrari)
  • random.randint()(Un intero in qualsiasi intervallo)
  • Generare una lista con numeri casuali come elementi
    • Elenco di numeri casuali in virgola mobile
    • Elenco di numeri interi casuali
  • Inizializzare il generatore di numeri casuali (fissare il seme del numero casuale)

Vedi il seguente articolo su come estrarre o ordinare in modo casuale gli elementi di una lista.

random.random() (Numero in virgola mobile tra 0,0 e 1,0)

La funzione random() del modulo random genera un numero casuale in virgola mobile di tipo float che è compreso tra 0,0 e 1,0.

import random

print(random.random())
# 0.4496839011176701

random.uniform() (Qualsiasi gamma di numeri in virgola mobile)

uniform(a, b)Le funzioni di questo modulo casuale generano numeri casuali di tipo float con numeri in virgola mobile in uno qualsiasi dei seguenti intervalli

  • a <= n <= b
  • 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, restituiranno naturalmente solo quel valore. Il valore di ritorno è sempre un float.

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

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

L'argomento può anche essere specificato come un float.

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

Se il valore di b è incluso nell'intervallo dipende dal seguente arrotondamento, come documentato.
a + (b-a) * random.random()

Se il valore dell'endpoint b è nell'intervallo o meno dipende dall'arrotondamento in virgola mobile nella seguente equazione
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

Genera numeri casuali che seguono una distribuzione normale, gaussiana, ecc.

Le funzioni random() e uniform() di cui sopra generano numeri casuali distribuiti uniformemente, ma ci sono anche funzioni per generare numeri in virgola mobile che seguono la seguente distribuzione.

  • distribuzione beta:random.betavariate()
  • distribuzione esponenziale:random.expovariate()
  • distribuzione gamma:random.gammavariate()
  • Distribuzione gaussiana:random.gauss()
  • distribuzione lognormale:random.lognormvariate()
  • distribuzione normale:random.normalvariate()
  • Distribuzione di Von Mises:random.vonmisesvariate()
  • Distribuzione di Pareto:random.paretovariate()
  • Distribuzione di Weibull:random.weibullvariate()

I parametri di ogni distribuzione sono specificati da argomenti. Vedere la documentazione ufficiale per i dettagli.

random.randrange() (Intero di intervallo e passo arbitrari)

randrange(start, stop, step)
La funzione di questo modulo casuale restituisce un elemento selezionato a caso tra i seguenti elementi.
range(start, stop, step)

Come con range(), gli argomenti start e step possono essere omessi. Se sono omessi, 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

L'argomento passo può essere impostato per generare un numero intero casuale pari o dispari, o un numero intero casuale che è un multiplo di tre.

Per esempio, se l'inizio è pari e il passo=2, solo gli interi pari nell'intervallo possono essere ottenuti in modo casuale.

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

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

random.randint() (Un intero in qualsiasi intervallo)

randint(a, b)
La funzione di questo modulo casuale restituisce il seguente int intero casuale.
a <= n <= b
randrange(a, b + 1)Equivalente a questo; si noti che anche il valore di b è incluso nell'intervallo.

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

Generare una lista con numeri casuali come elementi

In questa sezione, spiegheremo come usare il modulo random della libreria standard per generare una lista con numeri casuali come elementi.

Elenco di numeri casuali con float in virgola mobile

Per generare una lista i cui elementi sono numeri casuali in virgola mobile, combinate le funzioni random() e uniform() con la notazione di comprensione della lista.

import random

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

Nell'esempio sopra, viene usato range(), ma sono possibili anche liste e tuple per il numero di elementi desiderato. Per maggiori dettagli sulla comprensione delle liste, fate riferimento al seguente articolo.

Elenco di numeri interi int casuali

Quando si genera una lista i cui elementi sono numeri interi casuali, combinando le precedenti randange() e randint() con la notazione di comprensione della lista si possono ottenere valori duplicati.

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

Se volete fare una sequenza casuale di interi senza duplicazione, estraete gli elementi di range() con un intervallo arbitrario usando 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]

Per maggiori informazioni su random.sample(), fate riferimento al seguente articolo.

Inizializzare il generatore di numeri casuali (fissare il seme del numero casuale)

Dando un numero intero arbitrario alla funzione seed() del modulo random, il seme del numero casuale può essere fissato e il generatore di numeri casuali può essere inizializzato.

Dopo l'inizializzazione con lo stesso seme, il valore casuale è sempre generato nello 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