Générer toutes les combinaisons possibles de 10 chiffres

David -  
trauqnej Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

J'aimerais créer un programme en python m'enregistrant dans un fichier toutes les combinaisons possibles des chiffres 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Le résultat doit être uniquement sur 8 caractères et un chiffres peut être utilisé plusieurs fois.

Voici mon code :

#imports necessaires
from itertools import combinations_with_replacement

#creation de la liste des 10 chiffres
liste = ["0","1","2","3","4","5","6","7","8","9"]

#variable de l'incrémentation
nombre = 0

#bouble de "calcul" des combinaisons
for i in combinations_with_replacement(liste, 8):
    nombre += 1

    #convertion de la liste en string
    Str_from_liste = "".join(i)

#ajout de l'occurence dans un fichier texte
    with open("/home/pierre/Bureau/crackpdf/dict.txt", "a") as f:
        f.write("\n")
        f.write(Str_from_liste)


print(nombre)

Le résultat n'est pas celui attendu : seulement 24310 occurrences.

Quelqu'un aurait-il une idée ?

En vous remerciant par avance

David

3 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

Bonjour

Quand tu parles de répétition de nombres cela signifie t-il que tu peux avoir plusieurs fois le même chiffre dans un même nombre ?

Par exemple plusieurs zéro : 10 000 000 ?

Si oui, pas besoin de mathématiques combinatoire, il suffit de faire une boucle alant du nombre 10 000 000 jusqu'au nombre 99 999 999

Par contre, si tu veux les combinaisons de chaque nombre ayant un chiffre distinct parmi la liste que tu proposes par exemple 12345679

La , oui, il n'y a que 24310 combinaisons possibles.


0
jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 

Bonjour,

Et comme le résultat n'est peut être pas un nombre, mais une chaine de 8 chiffres, on pourrait alors commencer à 00000000, 00000001, ...

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention  
 

Oui.. c'est vrai que je n'ai pas pensé au lead zeros..

Bref.. ça va être long à ecrire .:-)

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour, je suggère d'utiliser "product" à la place de "combinations_with_replacement".

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

syntaxe:

for i in itertools.product(liste,repeat=8)
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

Ton code fait 10 millions de "open".  Mieux d'en faire un seul:

import itertools
liste=[str(i) for i in range(10)]
f=open("liste.txt","w")
c=0
for n in itertools.product(liste,repeat=8):
    c += 1
    f.write("\n"+"".join(n))
print(c)
f.close()
0
trauqnej Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   23
 

bonjour,

je verrais bien un truc dans le style :

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

Cordialement,

0