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

Fermé
David - 30 juil. 2022 à 22:43
trauqnej Messages postés 154 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 septembre 2022 - 3 août 2022 à 02:46

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 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
Modifié le 31 juil. 2022 à 01:01

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 40476 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 novembre 2024 9 428
31 juil. 2022 à 12:15

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 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > jee pee Messages postés 40476 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 novembre 2024
31 juil. 2022 à 13:27

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 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 Ambassadeur 1 554
31 juil. 2022 à 14:39

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

0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554
31 juil. 2022 à 14:55

syntaxe:

for i in itertools.product(liste,repeat=8)
0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024
Modifié le 31 juil. 2022 à 19:00

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 mardi 7 juin 2005 Statut Membre Dernière intervention 5 septembre 2022 23
3 août 2022 à 02:46

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