Hay dos formas obvias de generar un dígito aleatorio de 0 a 9 en Python. Se podría generar un número aleatorio de coma flotante entre 0 y 1, multiplicar por 10 y redondear hacia abajo. Alternativamente, uno podría usar el random.randintmétodo.
import random
def random_digit_1():
return int(10 * random.random())
def random_digit_2():
return random.randint(0, 9)
Tenía curiosidad sobre lo que sucedería si uno generara un número aleatorio entre 0 y 1, y mantuviera el último dígito. No esperaba necesariamente que la distribución fuera uniforme, pero el resultado me pareció bastante 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)
Salida:
Counter({1: 84206,
5: 130245,
3: 119433,
6: 129835,
8: 101488,
2: 100861,
9: 84796,
4: 129088,
7: 120048})
A continuación se muestra un histograma. Tenga en cuenta que 0 no aparece, ya que los ceros finales se truncan. Pero, ¿alguien puede explicar por qué los dígitos 4, 5 y 6 son más comunes que el resto? Usé Python 3.6.10, pero los resultados fueron similares en Python 3.8.0a4.
strlo convierte a base-10, lo que seguramente causará problemas. por ejemplo, una mantisa flotante de 1 bit b0 -> 1.0y b1 -> 1.5. El "último dígito" siempre será 0o 5.
random.randrange(10)es aún más obvio, en mi humilde opinión. random.randint(que llama random.randrangebajo el capó) fue una adición posterior al randommódulo para personas que no entienden cómo funcionan los rangos en Python. ;)
randrangerealidad llegó en segundo lugar, después de que decidieron que la randintinterfaz era un error.
