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 :

Impossible d'additionner deux tableaux


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Par défaut Impossible d'additionner deux tableaux
    Bonjour,

    J'aimerais créer un classement des meilleurs buteurs il y a 3 joueurs qui participent à ce classement. En tout il y aura deux tours:
    On attribue les points en fonction des buts.

    Au premier tour vous marquez le plus de buts vous avez 6 points, vous marquez le moins de buts vous avez 2 points , vous êtes entre les deux vous avez 4 points.

    Maintenant j'aimerais créer une fonction qui regroupe le nom des joueurs de foot et j'aimerais additionner leurs points.
    Voici le résultat que je souhaiterai obtenir.

    Premier tour:
    Drogba 2 points 6 buts
    Owen 4 points 12 buts
    Henry 6 points 18 buts

    Deuxième tour:
    Henry 2 points 6 buts
    Drogba 4 points 5 buts
    Owen 6 points 8 buts

    Classement Final :
    Drogba 6 points
    Henry 8 points
    Owen 10 points

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
     
    def printOne(name, goal1):
        score1 = []
        for i in range( len( name) ):
     
            print("\t\t\t\t" + name[ i ] + "\t " + str(point[i]) + " point - \t" + str( goal1[i]) + " buts")
     
            score1.append(point[i])
     
     
     
    def trisGoal1(name ,goal1):
     
        for i  in range( len(name)-1, 0, -1 ):
     
            for j in range(i):
     
                if name[j+1] < name[ j ]:
     
                    FlagParti = name[ j ]
     
                    FlagLong = goal1[ j ]
     
                    name[ j ] = name[ j + 1 ]
     
                    goal1[ j ] = goal1[ j +1 ]
     
                    name[ j + 1] = FlagParti
     
                    goal1[ j + 1 ] = FlagLong
     
    def printSeconde(name, goal2):
        score2 = []
        for i in range( len( name) ):
     
            print("\t\t\t\t" + name[ i ] + "\t " + str(point[i]) + " point - \t" + str( goal2[i]) + " buts")
     
            score2.append(point[i])
     
     
     
     
    def trisGoal2(name , goal2):
     
        for i  in range( len(name)-1, 0, -1 ):
     
            for j in range(i):
     
                if name[j+1] < name[ j ]:
     
                    FlagParti = name[ j ]
     
                    FlagLong = goal2[ j ]
     
                    name[ j ] = name[ j + 1 ]
     
                    goal2[ j ] = goal2[ j +1 ]
     
                    name[ j + 1] = FlagParti
     
                    goal2[ j + 1 ] = FlagLong
     
    def printFinal(name):
     
        for i in range( len( name) ):
          print("\t\t\t\t" + name[ i ] )  
     
     
    name = ["Henry", "Owen", "Drogba"];
    point = [2,4,6]
    goal1 = [18,12,6]
    goal2 = [6,8,5]
     
    print("Premier tour ") 
    trisGoal1(goal1, name)
    printOne(name, goal1)
     
    print("Second tour ") 
    trisGoal2(goal2, name)
    printSeconde(name, goal2)
     
    print("Affichage Final ")  
    printFinal(name)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Si vous avez une fonction comme def trisGoal1(name ,goal1): et que pour l'appeler vous écrivez: trisGoal1(goal1, name), çà ne va pas vous aider à comprendre ce qu'il se passe dans votre code lorsque vous allez devoir le relire (pour comprendre pourquoi il fait autre chose que ce que vous attendez).
    De plus, pourquoi fabriquer une fonction trisGoal2 qui est un copie/coller de trisGoal1? Si on écrit des fonctions, c'est pour qu'elles puissent être réutilisées avec des arguments différents.
    Enfin, le message d'erreur que vous avez est explicite: vous définissez la fonction printFinal(name, score1, score2), si vous l'appelez avec seulement 2 arguments, çà plante.

    Tout çà est ce qu'on apprend en ouvrant un tuto et en faisant les exercices qui y sont proposés.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éclairé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Si vous avez une fonction comme def trisGoal1(name ,goal1): et que pour l'appeler vous écrivez: trisGoal1(goal1, name), çà ne va pas vous aider à comprendre ce qu'il se passe dans votre code lorsque vous allez devoir le relire (pour comprendre pourquoi il fait autre chose que ce que vous attendez).
    Salut,

    Désolé mais je ne suis pas d’accord avec toi. L’objectif est qu’on attribue les points en fonction du nombres de buts. Par conséquent il faudra d'abord trier le tableau en fonction du nombre de buts et non par le nom du joueur.
    Voir image


    Si on fait pas comme ça on aura ceci et comme tu l’auras constaté les points ne sont pas attribués en fonction des buts marqués par les joueurs



    Citation Envoyé par wiztricks Voir le message
    De plus, pourquoi fabriquer une fonction trisGoal2 qui est un copie/coller de trisGoal1? Si on écrit des fonctions, c'est pour qu'elles puissent être réutilisées avec des arguments différents.
    Effectivement je me suis posé la même question. Je n’ai pas trouvé de solution pour le moment…

    Citation Envoyé par wiztricks Voir le message
    Enfin, le message d'erreur que vous avez est explicite: vous définissez la fonction printFinal(name, score1, score2), si vous l'appelez avec seulement 2 arguments, çà plante.
    - W
    Je pense que j'ai mal stocké dans les tableaux score1 et score2 les valeurs du tableau point ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def printOne(name, goal1):
        score1 = []
        for i in range( len( name) ):
     
            print("\t\t\t\t" + name[ i ] + "\t " + str(point[i]) + " point - \t" + str( goal1[i]) + " buts")
     
            score1.append(point[i])
    Concernant le résultat final je préfère pour le moment afficher que le nom dans ma fonction printFinal() en attendant que tout soit correct plus haut

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tamzoro Voir le message
    Désolé mais je ne suis pas d’accord avec toi.
    Ben à mon avis tu devrais vu son niveau...

    Citation Envoyé par Tamzoro Voir le message
    Effectivement je me suis posé la même question. Je n’ai pas trouvé de solution pour le moment…
    Parce que tu fais trop l'association entre "goal1" (paramètre de la fonction) et "goal1" (tableau de buts de ton programme). Alors que ça n'a rien à voir (et c'est ta faute car tu as donné les mêmes noms à deux entités distinctes). Bref tu aurais défini une fonction def triToutGoal(goalX) tu aurais tout à fait le droit de l'appeler avec "goal1" ou "goal2" et ça fonctionnerait dans les deux cas (à chaque appel, le tableau mentionné est transmis à la fonction)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Tamzoro Voir le message
    Désolé mais je ne suis pas d’accord avec toi. L’objectif est qu’on attribue les points en fonction du nombres de buts. Par conséquent il faudra d'abord trier le tableau en fonction du nombre de buts et non par le nom du joueur.
    C'est ce que vous avez écrit dans votre code...
    Réfléchissez un peu!
    Vous avez 3 listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> name = ["Henry", "Owen", "Drogba"];
    >>> goal1 = [18,12,6]
    >>> goal2 = [6,8,5]
    Vos fonctions trient name et goal1, puis name et goal2.
    Donc vous avez perdu le rangement fait la première fois... et à la fin vous ne pouvez plus "additionner".
    Plutôt que de "bouger" le contenu des listes, votre fonction tri devrait retourner le classement de chaque joueur.
    Et comme le nombre de point est une fonction du classement, le nombre total de points sera la somme des points acquis en fonction du classement dans chaque jeu.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre éclairé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Par défaut
    Bonsoir à vous tous,
    Tout d'abord je vous remercie pour votre aide et vos explications. J'ai finalement suivi les conseils de wiztricks je pense que le tri est bon pour cette fois-ci concernant le premier tour ?
    Petite question:
    Comment faire pour que dans le deuxième tour nous puissions obtenir ceci comme résultat ?
    Henry 2 points 6 buts
    Drogba 4 points 5 buts
    Owen 6 points 8 buts

    Comme vous l'apercevez je n'obtiens pas cette réponse, j'ai l'impression que le tableau score2 n'a pas stocké correctement les items du tableau point ?


    Voici mon code:
    ps: que pensez-vous de ma fonction printOne() ???

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    def printOne(name, goal1, goal2):
        score1 = []
        score2 = []
        but1 = []
        but2 = []
        for i in range( len( name) ):
            score1.append(point[i])
            but1.append(goal1[i])
            score2.append(point[i])
            but2.append(goal2[i])
     
        print("\t \t \t \t Premier tour \n ")
     
        for i in range( len( name) ):
            print("\t\t\t\t" + name[ i ] + " \t " +  str( score1[i]) + " points "+ str(but1[i]) + " buts" )
        print("=======================================================")
     
        print("\t \t \t \t Second tour \n ")
     
        for i in range( len( name) ):
            print("\t\t\t\t" + name[ i ] + " \t " +  str( score2[i]) + " points " + str(but2[i]) + " buts" )
        print("=======================================================")
     
        print("\t \t \t \t Classement Final \n ")
     
        for i in range( len( name) ):
            print("\t\t\t\t" + name[ i ] + " \t " +  str( score1[i] + score2[i]) + " points " + str( but1[i] + but2[i]) + " buts " )
     
    def trier(name, goal1, goal2):  
        swap = True
        while swap:
            swap = False
            for i in range(len(name)-1):
                if goal1[i+1] < goal1[i]:
                    name[i], name[i+1] = name[i+1], name[i]
                    goal1[i], goal1[i+1] = goal1[i+1], goal1[i]
                    goal2[i], goal2[i+1] = goal2[i+1], goal2[i]
                    swap = True
        return name, goal1, goal2
     
    name = ["Henry", "Owen", "Drogba"];
    point = [2,4,6]
    goal1 = [18,12,6]
    goal2 = [6,8,5]
    gain = []
    trier(name, goal1, goal2)
    printOne(name, goal1, goal2)

  7. #7
    Membre éclairé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Vos fonctions trient name et goal1, puis name et goal2.
    Donc vous avez perdu le rangement fait la première fois... et à la fin vous ne pouvez plus "additionner".
    Plutôt que de "bouger" le contenu des listes, votre fonction tri devrait retourner le classement de chaque joueur.
    Et comme le nombre de point est une fonction du classement, le nombre total de points sera la somme des points acquis en fonction du classement dans chaque jeu.
    D'accord, donc il faudrait trier le tableau en fonction du scoreFinal() donc du nombre de points total et non en se basant sur le tableau goal1 et goal2 ? Et on affiche plus le premier tour ni le deuxième mais seulement le classement final ? C'est bien ça ?

Discussions similaires

  1. [PHP 5.3] Additionner les valeurs de certaines colonnes de deux tableaux
    Par renaud26 dans le forum Langage
    Réponses: 5
    Dernier message: 29/05/2014, 23h31
  2. PL/SQL COMPARAISON DE DEUX TABLEAUX APRES BULK
    Par mimi_été dans le forum PL/SQL
    Réponses: 5
    Dernier message: 30/06/2009, 12h14
  3. Concaténation de deux tableaux
    Par mego dans le forum Langage
    Réponses: 6
    Dernier message: 19/11/2008, 11h52
  4. Réponses: 4
    Dernier message: 11/10/2005, 10h17
  5. impossible d'ouvrir deux recordset sur la meme connection ?
    Par requiemforadream dans le forum ASP
    Réponses: 3
    Dernier message: 28/04/2005, 09h31

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