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 :

Des variables . . . variables


Sujet :

Python

  1. #1
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut Des variables . . . variables
    Bonsoir,
    J'ai une fonction d'addition de vecteur pour un exercice de math, j'utilise trois listes (v1, v2 et résultat).
    Je souhaite afficher le résultat sous une forme définie (et surtout imposée).

    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
    21
    22
    def add(size):
        ''' add two vectors and displays the result '''
        i, v1, v2, result = 0, [], [], []
        #Add two vectors
        while (i != size):
            v1.append(randint(-9, 9)) 
            v2.append(randint(-9, 9)) 
            result.append(v1[i] + v2[i])
            i = i+1
     
        #Display the result
        print "Vecteur A:\t",
        for j in range(len(v1)):
            print v1[j],'\t',
     
        print "\nVecteur B:\t",
        for j in range(len(v2)):
            print v2[j],'\t',
     
        print "\n\nVecteur A+B:\t",
        for j in range(len(result)):
            print result[j],'\t',
    Neanmoins le code d'affichage du resultat est trop repetitif a mon gout,
    J'aurais voulu enregistree dans une nouvelle listes le titre des lignes et bouclee afin d'afficher les resultats, mais je ne sais pas comment faire pour "changer" de liste a chaque boucle afin d'afficher v1 puis v2, puis result.
    J'ai bien penser tout mettre dans une seul liste mais ca retire la lisibilite (a mon gout), et j'ai tente de faire un liste de liste mais j'ai pas reussi a la remplir comme il faut.

    Merci de m'aider si vous avez une solution.
    amicalement, sloshy

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Une petite remarque : pourquoi n'utilises-tu pas une boucle for pour remplir tes listes, ou même carrément une list comprehension (quoiqu'ici ce ne soit pas tellement adapté étant donné que ça fait 3 boucles) ?
    Ensuite, pour l'affichage, je pense que le mieux serait de faire une fonction, par exemple qui prend en paramètre le texte à afficher (ou simplement le nom du vecteur) et qui l'affiche.
    Si tu tiens à tout mettre dans la même fonction, je te conseille d'utiliser un dictionnaire (cf la FAQ pour l'utilisation)
    Une proposition avec une boucle for et un dictionnaire :
    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
    def add(size):
        ''' add two vectors and displays the result '''
        vectors = {'A': [], 'B': [], 'A+B': []}
        #Add two vectors
        for i in range(size):
            vectors['A'].append(randint(-9, 9)) 
            vectors['B'].append(randint(-9, 9)) 
            vectors['A+B'].append(vectors['A'][i] + vectors['B'][i])
     
        #Display the result
        for name, vect in vectors.items():
            print "Vecteur %s:\t" % name,
            for j in range(len(vect)):
                print vect[j],'\t',
            print #va à la ligne, simplement pour que ce soit un peu plus propre

  3. #3
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Bonsoir et merci de ta réponse,
    Je ne suis pas habituée au for, d'ordinaire interdit dans nos sources.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        vectors = {'A': [], 'B': [], 'A+B': []}
    Tu cree un tuple c'est bien ca?
    Pourrais-tu détailler un petit peux stp? (en fait je ne vois exactement ce que c'est).

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Non, ce n'est pas un tuple, mais un dictionnaire. Tu peux voir cette structure comme un conteneur qui gère des paires (clé -> valeur). Un peu comme une liste "classique", sauf que les indices ne sont pas nécessairement des entiers, et par conséquent qu'il n'y a pas de notion d'ordre, on ne peut pas trier un dictionnaire.
    Ce que je fais, c'est que je crée donc le dictionnaire qui contient les trois vecteurs, avec comme clés les noms à afficher.
    Ensuite, pour accéder à un élément, c'est comme avec une liste, sauf que la clé n'est pas nécessairement un entier.
    Enfin, lors de l'affichage, j'itère sur les éléments du dictionnaire, la méthode items() renvoie les couples (clé, valeur) (dans un ordre arbitraire, par contre, si tu veux ordonner, il vaut mieux passer par une liste)

  5. #5
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Bonjour,
    Merci de ta réponse, j'ai remarquer hier que l'affichage etait un peu tordu, mais il semble y avoir une logique quand meme car en changeant le nom du vecteur A+B pour B+A le problème est résolu.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Comme je l'ai dit, un dictionnaire n'est pas ordonné, donc l'ordre d'affichage est arbitraire.
    Le même code, mais avec une liste :
    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
    def add(size):
        ''' add two vectors and displays the result '''
        vectors = [['A', []], ['B', []], ['A+B', []]]
        #Add two vectors
        for i in range(size):
            vectors[0].append(randint(-9, 9)) 
            vectors[1].append(randint(-9, 9)) 
            vectors[2].append(vectors[0][i] + vectors[1][i])
     
        #Display the result
        for name, vect in vectors.items():
            print "Vecteur %s:\t" % name,
            for j in range(len(vect)):
                print vect[j],'\t',
            print #va à la ligne, simplement pour que ce soit un peu plus propre

  7. #7
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    merci bien

  8. #8
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Bonsoir,
    items ne fonctionne pas sur une liste de ce que j'ai lu.

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Tu as raison, j'aurais dû relire mon code un peu plus attentivement (d'ailleurs, ce n'était pas la seule erreur, voilà ce qui arrive quand on fait trop de choses en même temps...), voilà une version qui fonctionne :
    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
    def add(size):
        ''' add two vectors and displays the result '''
        vectors = [['A', []], ['B', []], ['A+B', []]]
        #Add two vectors
        for i in range(size):
            vectors[0][1].append(randint(-9, 9))
            vectors[1][1].append(randint(-9, 9))
            vectors[2][1].append(vectors[0][1][i] + vectors[1][1][i])
     
        #Display the result
        for name, vect in vectors:
            print "Vecteur %s:\t" % name,
            for j in range(len(vect)):
                print vect[j],'\t',
            print #va à la ligne, simplement pour que ce soit un peu plus propre

  10. #10
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Salut,
    J'avais relu une partie et changer quelques "trucs" pour que ca fonctionne, des que j'ai le temps, je test ton code et je posterai mon code final.
    Merci beaucoup en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Import fichier texte avec des champs variables
    Par joshua12 dans le forum Access
    Réponses: 4
    Dernier message: 26/09/2006, 09h06
  2. Utilisation des "bin variable"
    Par sygale dans le forum SQL
    Réponses: 8
    Dernier message: 21/09/2006, 11h48
  3. [CSS] [DEBUTANT] hauteur des blocs variable
    Par sandro8 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 05/05/2006, 00h51
  4. un petit code tout simple o_O avec des $POST variable :)
    Par dark_vidor dans le forum Langage
    Réponses: 5
    Dernier message: 08/04/2006, 01h08
  5. [Debutant Swing] Taille des panels variable
    Par NhyMbuS dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 08/01/2006, 09h11

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