Digamos que necesito un número de 3 dígitos, por lo que sería algo como:
>>> random(3)
563
or
>>> random(5)
26748
>> random(2)
56
Para obtener un número aleatorio de 3 dígitos:
from random import randint
randint(100, 999) # randint is inclusive at both ends
(suponiendo que realmente te refieres a tres dígitos, en lugar de "hasta tres dígitos").
Para usar una cantidad arbitraria de dígitos:
from random import randint
def random_with_N_digits(n):
range_start = 10**(n-1)
range_end = (10**n)-1
return randint(range_start, range_end)
print random_with_N_digits(2)
print random_with_N_digits(3)
print random_with_N_digits(4)
Salida:
33
124
5127
Si lo desea como una cadena (por ejemplo, un número de teléfono de 10 dígitos) puede usar esto:
fuente
Si necesita un número de 3 dígitos y desea que 001-099 sean números válidos, debe usar randrange / randint, ya que es más rápido que las alternativas. Simplemente agregue los ceros anteriores necesarios al convertir a una cadena.
Alternativamente, si no desea guardar el número aleatorio como un int, puede hacerlo como un delineador:
python 3.6+ solo en un delineador:
Los resultados de ejemplo de lo anterior son:
Implementado como función:
fuente
¿Cuenta 0 como posible primer dígito? Si es así, entonces necesitas
random.randint(0,10**n-1)
. Si no es así,random.randint(10**(n-1),10**n-1)
. Y si nunca se permite el cero , entonces tendrá que rechazar explícitamente los números con un cero o sacarn
random.randint(1,9)
números.Aparte: es interesante que
randint(a,b)
utiliza una "indexación" algo no pitónica para obtener un número aleatorioa <= n <= b
. Uno podría haber esperado que funcionararange
y produjera un número aleatorioa <= n < b
. (Tenga en cuenta el intervalo superior cerrado).Dadas las respuestas en los comentarios acerca
randrange
, nota que estos pueden ser reemplazados con el limpiadorrandom.randrange(0,10**n)
,random.randrange(10**(n-1),10**n)
yrandom.randrange(1,10)
.fuente
a <= n <= b
también me sorprendió. Me molesta tener que poner ese extra-1
en mi código. :-)randint
(está en Lib / random.py) en realidad solo llamarandrange(a, b+1)
!Podrías escribir una pequeña función para hacer lo que quieras:
Básicamente,
10**(digits-1)
le da el número de {dígito} -dígito más pequeño y10**digits - 1
le da el número de {dígito} -dígito más grande (que resulta ser el número de {dígito + 1} dígito más pequeño menos 1!). Luego tomamos un número entero aleatorio de ese rango.fuente
Me gustó mucho la respuesta de RichieHindle, sin embargo me gustó la pregunta como ejercicio. Aquí hay una implementación de fuerza bruta usando cadenas :)
fuente
De la documentación oficial , ¿no parece que el método sample () es apropiado para este propósito?
Salida:
fuente
Podría crear una función que consuma una lista de int, se transforme en una cadena para concatenar y lanzar do int nuevamente, algo como esto:
fuente