Digamos que necesito un número de 3 dígitos, por lo que sería algo así como:

>>> random(3)
563

or

>>> random(5)
26748
>> random(2)
56
InformationsquelleAutor Arty | 2010-04-20

9 Comentarios

  1. 151

    Para obtener un aleatoria número de 3 dígitos:

    from random import randint
    randint(100, 999)  # randint is inclusive at both ends

    (suponiendo que realmente se trata de tres dígitos, en lugar de «hasta tres dígitos».)

    El uso de un número arbitrario 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)

    De salida:

    33
    124
    5127
    • Con esta solución, usted eliminará 10**(n-1) números de su agrupación al azar
    • Sí, por eso me dijo suponiendo que realmente se trata de tres dígitos, en lugar de «hasta tres dígitos».
    • 037 es un número de 3 dígitos, de menos de 100 :). Que es lo que quiero decir. Pero sí, por un no-aplicación de lotería, la solución es bien 😉
    • ¿Cómo puede este snipet dará un resultado de 037??? es un randint de (100 a 1000) si n ==3
    • Leer desde la parte superior :). Me refería yo quería que la serie y esta solución no le dan los números hasta que el número de dígitos, pero en lugar de exactamente ese número de dígitos. Fue mi mal, me perdí la cláusula en el paréntesis.
    • Esto realmente sólo debe ser al azar.randit(0,999) Otherwize se puede tener «909» y «990», pero no «099».
    • Sí, por eso me dijo suponiendo que realmente se trata de tres dígitos, en lugar de «hasta tres dígitos». Por favor, lea los comentarios anteriores.
    • Hasta tres dígitos es más fácil '{:03}'.format(random.randrange(0, 10**n)).

  2. 23

    Si quieres una cadena de texto (por ejemplo, un 10 dígitos del número de teléfono) puede utilizar este:

    n = 10
    ''.join(["%s" % randint(0, 9) for num in range(0, n)])
    • la mejor respuesta para mí!
  3. 5

    Hace 0 cuenta como un posible primer dígito? Si es así, entonces usted necesita random.randint(0,10**n-1). Si no, random.randint(10**(n-1),10**n-1). Y si el cero es nunca permitido, entonces usted tendrá que rechazan explícitamente las cifras con un cero en ellos, o dibujar n random.randint(1,9) números.

    A un lado: es interesante que randint(a,b) utiliza de alguna forma no-python «indexación» para obtener un número aleatorio a <= n <= b. Uno podría haber esperado que funcione como range, y producir un número aleatorio a <= n < b. (Nota cerrado el intervalo superior.)

    Dado las respuestas en los comentarios acerca de randrange, tenga en cuenta que estos pueden ser reemplazados con el limpiador de random.randrange(0,10**n), random.randrange(10**(n-1),10**n) y random.randrange(1,10).

    • n <= b me sorprendió demasiado. Me molesta tener que poner ese extra -1 en mi código. 🙂
    • curiosamente, el código Python para randint (en Lib/random.py) en realidad solo llamadas randrange(a, b+1)!
    • Sí, randrange debe ser preferido para el nuevo código.
    • pero randint es auto-explicativo 🙂 ..
  4. 3

    Usted podría escribir una función poco para hacer lo que quieres:

    import random
    def randomDigits(digits):
        lower = 10**(digits-1)
        upper = 10**digits - 1
        return random.randint(lower, upper)

    Básicamente, 10**(digits-1) le da el más mínimo {dígitos} número de un dígito, y 10**digits - 1 le da la mayor {dígitos} número de un dígito (que pasa a ser el más pequeño {dígitos+1}-dígitos de número menos 1!). A continuación, tomamos un entero aleatorio de ese rango.

  5. 3

    Si usted necesita un número de 3 dígitos y quiere 001-099 para ser válidos los números se deben usar randrange/randint ya que es más rápido que las alternativas. Sólo añadir los necesarios anterior ceros al convertir a una cadena.

    import random
    num = random.randrange(1, 10**3)
    # using format
    num_with_zeros = '{:03}'.format(num)
    # using string's zfill
    num_with_zeros = str(num).zfill(3)

    Alternativamente, si usted no desea guardar el número aleatorio como un int que usted puede hacer como un oneliner:

    '{:03}'.format(random.randrange(1, 10**3))

    python 3.6+ sólo oneliner:

    f'{random.randrange(1, 10**3):03}'

    Ejemplo las salidas de los anteriores son:

    • ‘026’
    • ‘255’
    • ‘512’

    Implementado como una función de:

    import random
    
    def n_len_rand(len_, floor=1):
        top = 10**len_
        if floor > top:
            raise ValueError(f"Floor {floor} must be less than requested top {top}")
        return f'{random.randrange(floor, top):0{len_}}'
  6. 2

    Si usted no desea memorizar todas las diferentes aparentemente al azar comandos (como yo) siempre se puede utilizar:

    import random
    Numbers = range(1, 10)
    RandomNumber = random.choice(Numbers)
    print(RandomNumber)
    #returns a number
  7. 0

    Me gustó mucho la respuesta de RichieHindle, sin embargo, me gustó la pregunta como un ejercicio. Aquí está la fuerza bruta utilizando la implementación de cadenas:)

    import random
    first = random.randint(1,9)
    first = str(first)
    n = 5
    
    nrs = [str(random.randrange(10)) for i in range(n-1)]
    for i in range(len(nrs))    :
        first += str(nrs[i])
    
    print str(first)
  8. 0

    De la la documentación oficial, ¿no parece que la muestra() el método es adecuado para este propósito?

    import random
    
    def random_digits(n):
        num = range(0, 10)
        lst = random.sample(num, n)
        print str(lst).strip('[]')

    De salida:

    >>>random_digits(5)
    2, 5, 1, 0, 4
  9. 0

    Podría crear una función que consume una lista de int, se transforma en cadena para concatenar y fundición de hacer int otra vez, algo como esto:

    import random
    
    def generate_random_number(length):
        return int(''.join([str(random.randint(0,10)) for _ in range(length)]))

Dejar respuesta

Please enter your comment!
Please enter your name here