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 :

problème affichage de résultat


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut problème affichage de résultat
    salut a tous ,
    j'ai un code qui me crée une liste de combinaison possible et me renvoi se résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> [['a', 'a', 'a', 'a', 'a', 'a'], ['a', 'a', 'a', 'a', 'a', 'b'], ['a', 'a', 'a', 'a', 'a', 'c'], ['a', 'a', 'a', 'a', 'a', 'd'], ['a', 'a', 'a', 'a', 'a', 'e'], ['a', 'a', 'a', etc....
    et moi je voudrai qu'il me le renvoi comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> aaaaaa
    >>> aaaaab
    >>> aaaaac
    etc...
    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def power(n,F):
        G=[[x] for x in F]
        for i in range (0,n-1):
            G= [y+[x] for y in G for x in F]
        return G
     
    def main():
        F=["a","b","c","d","e","f"]
        print power(6,F)
     
    if __name__ == '__main__':
        main()

    si quelqu'un peut m'aider

  2. #2
    Membre expérimenté
    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
    Points : 1 384
    Points
    1 384
    Par défaut
    Tu veux changer la valeur de retour de la fonction ou la façon dont le résultat est affiché ? Perso, je changerais seulement l'affichage, afin que la fonction reste la plus générique possible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print '\n'.join(''.join(x) for x in power(6,F))
    PS: utilise la balise [code] (le # dans la barre d'outil) !!

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    alors la je nage

    j'ai modifié le script en ajoutant toute les lettres : (un script qui teste toute les combinaison de mots d'une longueur de 6 lettres )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def power(n,F):
        G=[[x] for x in F]
        for i in range (0,n-1):
            G= [y+[x] for y in G for x in F]
        return G
     
    def main():
        F=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
        print '\n'.join(''.join(x) for x in power(6,F))
     
    if __name__ == '__main__':
        main()
    il tourne 10mn , sarrette et me renvoi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PythonWin 2.6.1 (r261:67515, Dec  5 2008, 13:58:38) [MSC v.1500 32 bit (Intel)] on win32.
    Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for further copyright information.
    Traceback (most recent call last):
      File "C:\Python26\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 312, in RunScript
        exec codeObject in __main__.__dict__
      File "C:\Documents and Settings\nicos\Bureau\newbie.py", line 12, in <module>
        main()
      File "C:\Documents and Settings\nicos\Bureau\newbie.py", line 9, in main
        print '\n'.join(''.join(x) for x in power(6,F))
      File "C:\Documents and Settings\nicos\Bureau\newbie.py", line 4, in power
        G= [y+[x] for y in G for x in F]
    MemoryError
    >>>
    une idée ??

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    Par défaut
    Bah c'est facile.... t'exploses ta taille de mémoire max.

    Alors si je me plante pas dans mes calculs ça fait un élément de 26^6*6 soit plus de 2 milliards de caractères....

    PS: Hé hé hé, tu serais pas en train de faire un programme pour gagner à "Motus", toi ?

  5. #5
    Membre expérimenté
    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
    Points : 1 384
    Points
    1 384
    Par défaut
    Il y a tout de même moyen de générer toutes les combinaisons, à condition de ne pas avoir a les stocker toutes en mémoire en même temps.
    Il suffit d'utiliser des générateurs au lieu de listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def power(n,F):
        G=([x] for x in F)
        for i in range (0,n-1):
            G= (y+[x] for y in G for x in F)
        return G
    C'est presque identique au code original, simplement il s'agit de "generator expressions" au lieu de "list comprehensions".
    Au passage, on peut simplifier un peu le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def power(n,F):
        G = [[]]
        for i in range(n):
            G = (y+[x] for y in G for x in F)
        return G
    Il faut adapter l'affichage pour qu'il consomme les éléments au fur et à mesure qu'ils sont générés au lieu d'attendre de les avoir tous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    F = "abcdefghijklmnopqrstuvwxyz"
    for x in power(6,F):
        print ''.join(x)
    Évidemment, si tu attends devant ton écran pour voir défiler les 308915776 combinaisons, prépare-toi à battre le record du monde de privation de sommeil...

  6. #6
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    le module itertools fourni les fonctions permutations et combinations depuis la version 2.6.

    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
    17
    18
    19
    20
    import itertools
    import string
     
    abcdef = string.lowercase[:6]
     
    print 
    print 
    print "*** combinations ***"
    print 
     
    for combination in itertools.combinations(abcdef, 3):
        print "".join(combination),
     
    print 
    print 
    print "*** permutations ***"
    print 
     
    for permutation in itertools.permutations(abcdef, 3):
        print "".join(permutation),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    *** combinations ***
     
    abc abd abe abf acd ace acf ade adf aef bcd bce bcf bde bdf bef cde cdf cef def
     
    *** permutations ***
     
    abc abd abe abf acb acd ace acf adb adc ade adf aeb aec aed aef afb afc afd afe bac
     bad bae baf bca bcd bce bcf bda bdc bde bdf bea bec bed bef bfa bfc bfd bfe cab cad
     cae caf cba cbd cbe cbf cda cdb cde cdf cea ceb ced cef cfa cfb cfd cfe dab dac dae 
    daf dba dbc dbe dbf dca dcb dce dcf dea deb dec def dfa dfb dfc dfe eab eac ead eaf 
    eba ebc ebd ebf eca ecb ecd ecf eda edb edc edf efa efb efc efd fab fac fad fae fba fbc
     fbd fbe fca fcb fcd fce fda fdb fdc fde fea feb fec fed
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    bon tout d abord , merci a tous

    j'ai réussi a envoyer toute les combinaison possible sur un fichier texte

    le hic c'est que se fichier .txt fait plus de 2 giga , donc impossible a ouvrir
    bon ben voila tout ca pour ca ....
    on va essayer de s orienter autrement. peut ètre diviser le fichier en 6 , on verra.

Discussions similaires

  1. [SQL-Server] problème affichage de résultat
    Par sisina dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/09/2009, 07h12
  2. [PDO] Problème de count et affichage des résultats
    Par s0ak68 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/01/2008, 23h03
  3. [AJAX] Affichage résultat ajax.request quand load page
    Par marcolet.pierre dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/01/2008, 16h27
  4. [MySQL] [SQL] problème affichage résultat d'une requête
    Par mitmit dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/04/2007, 11h14
  5. Problème d'affichage du résultat
    Par cirtey dans le forum C
    Réponses: 6
    Dernier message: 24/02/2007, 19h01

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