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.randint
mé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.
str
lo convierte a base-10, lo que seguramente causará problemas. por ejemplo, una mantisa flotante de 1 bit b0 -> 1.0
y b1 -> 1.5
. El "último dígito" siempre será 0
o 5
.
random.randrange(10)
es aún más obvio, en mi humilde opinión. random.randint
(que llama random.randrange
bajo el capó) fue una adición posterior al random
módulo para personas que no entienden cómo funcionan los rangos en Python. ;)
randrange
realidad llegó en segundo lugar, después de que decidieron que la randint
interfaz era un error.