IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

generateur de mots


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut generateur de mots
    salut a tous je voulai savoir si il est possible de sortir toute les possibilité de mots avec une liste donné ;

    exemple , dans une liste il y a :
    poisson bateau sony .....

    et a la sortie ca me donne :
    poissonbateau
    poissonsony
    bateaupoisson
    bateausony
    sonypoisson
    sonybateau
    poissonbateausony
    poissonsonybateau
    ...................
    ..............
    si quelqu'un peut m'éclairer

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Bonjour nicosprog,

    la réponse à ta question est oui.

    Content d'avoir pu t'aider.

    .
    .
    .




    Bon, tu veux peut-être aussi savoir comment ?
    D'après ton exemple, il semblerait que tu veuilles toutes les combinaisons possibles de deux mots ou plus, dans tous les ordres possibles.
    Voici pour commencer un générateur permet de générer toutes les permutations d'une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def all_permuts(l):
        if not l: yield []
        for i in xrange(len(l)):
            first = l[i]
            for rest in all_permuts(l[:i] + l[i+1:]):
                yield [first] + rest
    Pourquoi faire un générateur plutôt qu'une fonction qui retourne une liste ? Ben si tu consommes les permutations l'une après l'autre, cela revient au même fonctionnellement et cela économise de la mémoire. Et si tu as vraiment besoin d'une liste, il est facile de le convertir le résultat.

    Pour transformer ce générateur en un générateur qui retourne tous les sous-listes possibles en tenant compte de l'ordre, rien de plus facile; il suffit d'enlever le test (if not l: ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def all_sublists(l):
        yield []
        for i in xrange(len(l)):
            first = l[i]
            for rest in all_sublists(l[:i] + l[i+1:]):
                yield [first] + rest
    Après, il ne reste plus qu'à filtrer sur les listes de longueur >=2 et mettre en forme le résultat.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    >>> l = ['poisson','bateau','sony']
    >>> for e in all_sublists(l):
    ... 	if len(e)>=2: print ''.join(e)
    ... 	
    poissonbateau
    poissonbateausony
    poissonsony
    poissonsonybateau
    bateaupoisson
    bateaupoissonsony
    bateausony
    bateausonypoisson
    sonypoisson
    sonypoissonbateau
    sonybateau
    sonybateaupoisson
    Attention, le nombre de résultats augmente exponentiellement avec la taille de la liste initiale; avec une liste de 3 éléments, il y a 12 résultats. Avec une liste de 10 éléments, il y en a près de 1,000,000,000 ! On voit ici l'avantage du générateur: même avec 10 éléments, le code ci-dessus va fonctionner et n'utilisera que très peu de mémoire (mais bien sûr le temps de générer et surtout d'afficher le milliard de résultats sera très long).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut
    alors la bravo
    merci beaucoup, pour envoyer le resultat sur un fichier .txt

    >>> l = ['poisson','bateau','sony']
    >>> for e in all_sublists(l):
    ... if len(e)>=2: print ''.join(e)

    >>>fichier = open("fichier.txt", "w")
    >>>fichier.write( l )
    >>>fichier.close()

    mais ca me donne erreur ?
    poutant je crée mon fichier , j'ecrie dedans et je le ferme .

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    l c'est ta liste initiale, write te renvoie une erreur car il attend une chaîne de caractère, pas une liste.

    Pour écrire le résultat dans un fichier, c'est le print ''.join(e) qu'il faut remplacer par fichier.write(''.join(e))

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut
    alors quand je tape :

    >>>fichier = open("fichier.txt", "w")
    >>> l = ['poisson','bateau','sony']
    >>> for e in all_sublists(l):
    ... if len(e)>=2:
    >>>fichier.write( ".join(e))
    >>>fichier.close()

    il me donne une erreur au niveau des parenthèse fichier.write( ".join(e))
    si tu pouvais m'éclairer ca serrais super simpa. j'y suis presque

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    En faisant tourner ceci, je n'obtiens aucune erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def all_sublists(l):
        yield []
        for i in xrange(len(l)):
            first = l[i]
            for rest in all_sublists(l[:i] + l[i+1:]):
                yield [first] + rest
     
    f = open('fifi','w')
    l = ['poisson','bateau','sony']
    for e in all_sublists(l):
        print 'e =',e
        if len(e)>=2:
            f.write(''.join(e))
    f.close()
    Par contre il faut rajouter '\n' dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f.write(''.join(e)+'\n')
    pour obtenir une écriture de ligne pour chaque ''.join(e) et non pas qu'ils soient écrits tous à la queue leu leu dans le fichier sans séparateurs de nouvelle ligne '\n'

    Donne le code précis et le message d'erreur, qui indique la ligne incriminée, ce serait pas mal.

Discussions similaires

  1. Extraction de mots clés
    Par Olive1808 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 01/02/2016, 20h49
  2. [JavaScript] Generateur de mots de passe
    Par SpaceFrog dans le forum Contribuez
    Réponses: 48
    Dernier message: 22/12/2010, 09h58
  3. Réponses: 7
    Dernier message: 08/06/2010, 03h27
  4. generateur d'anagramme d'un mot
    Par fred_sell dans le forum Débuter
    Réponses: 3
    Dernier message: 17/06/2009, 10h07
  5. Algorithme pour generateur de mots
    Par spy_k dans le forum Linux
    Réponses: 6
    Dernier message: 09/04/2008, 08h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo