Existem duas maneiras óbvias de gerar um dígito aleatório de 0 a 9 no Python. Pode-se gerar um número de ponto flutuante aleatório entre 0 e 1, multiplicar por 10 e arredondar para baixo. Alternativamente, pode-se usar o random.randintmétodo
import random
def random_digit_1():
return int(10 * random.random())
def random_digit_2():
return random.randint(0, 9)
Eu estava curioso sobre o que aconteceria se alguém gerasse um número aleatório entre 0 e 1 e mantivesse o último dígito. Eu não esperava necessariamente que a distribuição fosse uniforme, mas achei o resultado bastante surpreendente.
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)
Resultado:
Counter({1: 84206,
5: 130245,
3: 119433,
6: 129835,
8: 101488,
2: 100861,
9: 84796,
4: 129088,
7: 120048})
Um histograma é mostrado abaixo. Observe que 0 não aparece, pois os zeros à direita são truncados. Mas alguém pode explicar por que os dígitos 4, 5 e 6 são mais comuns que o resto? Eu usei o Python 3.6.10, mas os resultados foram semelhantes no Python 3.8.0a4.
strconverte-o para a base-10, que provavelmente causará problemas. por exemplo, uma mantissa flutuante de 1 bit b0 -> 1.0e b1 -> 1.5. O "último dígito" será sempre 0ou 5.
random.randrange(10)é ainda mais óbvio, IMHO. random.randint(que chama por random.randrangebaixo do capô) foi uma adição posterior ao randommódulo para pessoas que não entendem como os intervalos funcionam no Python. ;)
randrangena verdade, ficou em segundo lugar, depois que eles decidiram que a randintinterface era um erro.
