Esistono due modi ovvi per generare una cifra casuale da 0 a 9 in Python. Si potrebbe generare un numero in virgola mobile casuale compreso tra 0 e 1, moltiplicarlo per 10 e arrotondare per difetto. In alternativa, si potrebbe usare il random.randintmetodo.
import random
def random_digit_1():
return int(10 * random.random())
def random_digit_2():
return random.randint(0, 9)
Ero curioso di sapere cosa accadrebbe se si generasse un numero casuale compreso tra 0 e 1 e si mantenesse l' ultima cifra. Non mi aspettavo necessariamente che la distribuzione fosse uniforme, ma ho trovato il risultato abbastanza sorprendente.
from random import random, seed
from collections import Counter
seed(0)
counts = Counter(int(str(random())[-1]) for _ in range(1_000_000))
print(counts)
Produzione:
Counter({1: 84206,
5: 130245,
3: 119433,
6: 129835,
8: 101488,
2: 100861,
9: 84796,
4: 129088,
7: 120048})
Di seguito è mostrato un istogramma. Si noti che 0 non viene visualizzato, poiché gli zeri finali vengono troncati. Qualcuno può spiegare perché le cifre 4, 5 e 6 sono più comuni delle altre? Ho usato Python 3.6.10, ma i risultati erano simili in Python 3.8.0a4.
strlo converte in base-10 che è destinato a causare problemi. ad es. una mantissa float a 1 bit b0 -> 1.0e b1 -> 1.5. L '"ultima cifra" sarà sempre 0o 5.
random.randrange(10)è ancora più ovvio, IMHO. random.randint(che chiama random.randrangesotto il cofano) è stata un'aggiunta successiva al randommodulo per le persone che non capiscono come funzionano i range in Python. ;)
randrangerealtà è arrivato secondo, dopo aver deciso che l' randintinterfaccia era un errore.
