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

David -  
trauqnej Messages postés 162 Statut Membre -

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 40050 Statut Modérateur 4 758
 

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 42407 Date d'inscription   Statut Modérateur Dernière intervention   9 746
 

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 40050 Statut Modérateur 4 758 > jee pee Messages postés 42407 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 24281 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 585
 

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

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

syntaxe:

for i in itertools.product(liste,repeat=8)
0
yg_be Messages postés 24281 Date d'inscription   Statut Contributeur Dernière intervention   1 585 > yg_be Messages postés 24281 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 162 Statut Membre 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