Skip to content

Generare int/float casuali in Python (random, randrange, randint, ecc.)

Python

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