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.randint
mé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.
str
converte-o para a base-10, que provavelmente causará problemas. por exemplo, uma mantissa flutuante de 1 bit b0 -> 1.0
e b1 -> 1.5
. O "último dígito" será sempre 0
ou 5
.
random.randrange(10)
é ainda mais óbvio, IMHO. random.randint
(que chama por random.randrange
baixo do capô) foi uma adição posterior ao random
módulo para pessoas que não entendem como os intervalos funcionam no Python. ;)
randrange
na verdade, ficou em segundo lugar, depois que eles decidiram que a randint
interface era um erro.