Generar todas las combinaciones posibles de 10 dígitos

David -  
trauqnej Mensajes publicados 162 Estado Miembro -

Hola,

Me gustaría crear un programa en Python que registre en un archivo todas las combinaciones posibles de los números 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9.

El resultado debe tener únicamente 8 caracteres y un número puede usarse varias veces.

Aquí está mi código:

#importaciones necesarias from itertools import combinations_with_replacement #creación de la lista de los 10 dígitos lista = ["0","1","2","3","4","5","6","7","8","9"] #variable de la incrementación nombre = 0 #bucle de "cálculo" de las combinaciones for i in combinations_with_replacement(liste, 8): nombre += 1 #conversión de la lista en cadena Str_from_liste = "".join(i) #adición de la ocurrencia en un archivo de texto with open("/home/pierre/Bureau/crackpdf/dict.txt", "a") as f: f.write("\n") f.write(Str_from_liste) print(nombre)

El resultado no es el esperado: solo 24310 ocurrencias.

¿Alguien tendría una idea?

Agradeciéndoles de antemano

David

3 respuestas

  1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833
     

    Hola

    Cuando hablas de repetición de números, ¿significa eso que puedes tener varias veces el mismo dígito en un mismo número?

    Por ejemplo, varios ceros: 10 000 000?

    Si es así, no hace falta matemática combinatoria, solo basta con hacer un bucle desde el número 10 000 000 hasta el número 99 999 999

    Por otro lado, si quieres las combinaciones de cada número que tenga un dígito distinto de la lista que propones, por ejemplo, 12345679

    Ahí, sí, solo hay 24 310 combinaciones posibles.


    .
    Atentamente,
    Jordane

    0
    1. jee pee Mensajes publicados 9458 Fecha de registro   Estado Moderador Última intervención   10 013
       

      Hola,

      Y como el resultado puede que no sea un número, sino una cadena de 8 dígitos, podríamos empezar con 00000000, 00000001, ...

      0
      1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833 > jee pee Mensajes publicados 9458 Fecha de registro   Estado Moderador Última intervención  
         

        Sí... es cierto que no pensé en los ceros a la izquierda...

        En fin... va a ser largo de escribir .:-)

        0
  2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Embajador 1 588
     

    hola, sugiero usar "product" en lugar de "combinations_with_replacement".

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      sinxtaxis:

      for i in itertools.product(lista,repetir=8)
      0
      1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         

        Tu código realiza 10 millones de "open". Es mejor hacer solo uno:

        import itertools lista=[str(i) for i in range(10)] f=open("lista.txt","w") c=0 for n in itertools.product(lista,repeat=8): c += 1 f.write("\n"+"".join(n)) print(c) f.close()
        0
  3. trauqnej Mensajes publicados 162 Estado Miembro 23
     

    hola,

    me gustaría ver algo en el estilo:

    fic = open("/tmp/fichero.txt",'w') for i in range(100000000): fic.write("{:0>8d}".format(i)+"\n") fic.close()

    Atentamente,

    0