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

  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 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
    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 ?
    Ben déjà il faudrait essayer de voir "plus loin" que ses petits tableaux "name", "goal1", "goal2", "points" et essayer de commencer à penser "conception". Par exemple, de quoi parlons nous ? De joueurs qui ont un nom, et des buts à leur actif.
    On pourrait donc déjà envisager ici un petit tableau de dicos style
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tabJoueur=[
    	{name : "Henri", goals : [18, 6], points=2},
    	{name : "Owen", goals : [12, 8], points=4},
    	{name : "Drogba", goals : [6, 5], points=6},
    ]
    Déjà là on sent mieux qui a quoi. On y gagne à la fois en clarté, en lecture et en évolution. Si on veut rajouter un 3° goal à chacun, on fait une modif et tout remarche (si on a bien entendu programmé la suite par rapport à cette conception).

    Ensuite on peut aller plus loin et carrément envisager l'objet
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class cJoueur(object):
    	def __init__(self, name="", goals=[], points=0):
    		self.name=name
    		self.goals=goals
    		self.points=points
    	# __init__()
    # class cJoueur
     
    tabJoueur=[
    	cJoueur("Henri", [18, 6], 2),
    	cJoueur("Owen", [12, 8], 4),
    	cJoueur("Drogba", [6, 5], 6),
    ]
    Déjà ça n'enlève rien à la façon de voir précédente mais en plus ça ouvre d'autres possibilités. On peut par exemple rajouter à l'objet une fonction qui affiche l'état du joueur, une autre qui calcule ses points, etc etc etc.

    Un exemple à partir de cette conception
    Code python : 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
    class cJoueur(object):
    	def __init__(self, name="", goals=(), points=0):
    		self.name=name
    		self.goals=list(goals)
    		self.points=points
    		self.totGoals=0
    		self.totPoints=0
    	# __init__()
     
    	def raz(self):
    		self.totGoals=0
    		self.totPoints=0
    	# raz()
    # class cJoueur
     
    def affiche(tabJoueur):
    	titre=("premier", "deuxième")
    	for joueur in tabJoueur: joueur.raz()
    	for tour in xrange(max(len(x.goals) for x in tabJoueur)):
    		try:
    			label="%s tour" % titre[tour]
    		except IndexError:
    			label="Tour %d" % (tour+1)
    		# try
    		print
    		print(label)
    		for joueur in tabJoueur:
    			# Permet de gérer des joueurs n'ayant pas le même nombre de goals (comme "Henri qui en a 3 ce qui donnera 3 tours alors que les autres n'en ont que 2 et n'auront donc rien à afficher au tour 3)
    			try:
    				goals=joueur.goals[tour]
    			except IndexError:
    				goals=0
    			# try
     
    			# Calcul
    			joueur.totGoals+=goals
    			joueur.totPoints+=joueur.points
     
    			# Affichage
    			print "Nom: %s, Buts: %d, Points: %d" % (
    				joueur.name,
    				goals,
    				joueur.points,
    			)
    		# for
    	# for
     
    	print
    	print("Classement final")
    	for joueur in tabJoueur:
    		print "Nom: %s, Buts: %d, Points: %d" % (
    			joueur.name,
    			joueur.totGoals,
    			joueur.totPoints,
    		)
    	# for
    # affiche()
     
    tabJoueur=(
    	cJoueur("Henri", (18, 6, 5), 2),
    	cJoueur("Owen", (12, 8), 4),
    	cJoueur("Drogba", (6, 5), 6),
    )
     
    affiche(tabJoueur)

    Et même si on ne fait rien de plus, on gagne quand-même énormément ne serait-ce que pour le tri où au lieu d'échanger péniblement name[i] avec name[i+1], goal1[i] avec goal1[i+1] et etc etc ; on échange directement tabJoueur[i] avec tabJoueur[i+1].

    Alors c'est effectivement un peu long à concevoir au début, on revient même parfois en arrière, mais ensuite on gagne un temps fou pour coder...
    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]

  8. #8
    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
    Citation Envoyé par Tamzoro Voir le message
    J'ai finalement suivi les conseils de wiztricks je pense que le tri est bon pour cette fois-ci concernant le premier tour ?
    Mettez votre fonction de "tri" en commentaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #trier(name, goal1, goal2)
    printOne(name, goal1, goal2)
    et vous devriez obtenir les mêmes résultats.
    Si c'est le cas, à quoi sert "trier"?

    Plus généralement (et sans passer à l'artillerie lourde des classes), vous avez une liste de joueurs et une liste de listes des buts correspondants marqués à chaque match i.e. goals = [ résultats match 1, résultat match 2, résultats match 3, ... ].
    Et vous n'avez rien à trier mais à sortir le classement de chaque joueur pour les différents matches qui permettra de leur attribuer un certain nombre de points qu'on pourra additionner ensuite.
    Si votre code raconte une autre histoire, çà ne marchera pas.

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

  9. #9
    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
    Bonjour,

    J'ai travaillé une partie de la nuit sur mon programme j'y suis presque arrivé !! J'ai finalement réussi à régler le problème du triage pour ce qui est du premier tour et du second.
    Mon dernier problème (enfin je pense), est au niveau du classement final je pense avoir réussi à additionner le score1 (donc les points du premier tour) avec le score2 qui sont les points du deuxième tour pour au final obtenir un scoreFinal.

    Mon problème est au niveau du triage ? Je pense que je dois créer un nouveau tri ? Et que je dois juste trier le résultat final (donc les points du premier tour et du second) ???
    Sa n'a pas l'air de fonctionner que pensez-vous de ma fonction triFinal() ???

    Encore merci pour votre aide



    ps: je ne suis pas encore capable de faire du POO , on verra d'ici 6 mois

    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
     
    # --- Etape 1/ Afficher les noms des joeurs + points et buts 
    def affichage1(name, goal, score1):
        for i in range(len(name)):
            score1.append(point[i])
            print("Nom : " + name[i] + " \t " + str(score1[i]) + " points " + str(goal[i]) + " goals ")
     
        return score1 
     
    def affichage2(name, goal, score2):
        for i in range(len(name)):
            score2.append(point[i])
            print("Nom : " + name[i] + " \t " + str(score2[i]) + " points " + str(goal[i]) + " goals ")
     
        return score2
     
    # --- Etape 2/ Trier les points par rapport aux goals marqués  
    def tri(name, goal1, goal2, pts):
        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, pts 
     
    # --- Etape 3/ Afficher le nombre de points 
    def affichageFinal(name, scoreFinal):
        for i in range(len(name)):
            scoreFinal.append(str(score1[i] + score2[i]))
            print("Nom : " + name[i] + " \t " + str(scoreFinal[i]) + " points " )
     
        return scoreFinal
     
        print(scoreFinal)
     
    # --- Etape 4/ Trier par rapport au nombre de points (plus petit au plus grand)
     
    def triFinal(name, scoreFinal):
        swap = True
        while swap:
            swap = False
            for i in range(len(name) - 1):
                if scoreFinal[i + 1] < scoreFinal[i]:
                    name[i], name[i + 1] = name[i + 1], name[i]
                    scoreFinal[i], scoreFinal[i + 1] = scoreFinal[i + 1], scoreFinal[i]
                    swap = True
        return name, scoreFinal
     
    name = ["Henry", "Owen", "Drogba"]
    score1 = []
    score2 = []
    scoreFinal = []
    goal1 = [10,8,6]
    goal2 = [4,6,5]
    point = [2,4,6]
     
    print(" Premier tour : ")
    print(" ")
    name, goal1, goal2, score1 = tri(name, goal1, goal2, score1)
    score1 = affichage1(name, goal1, score1)
     
    print("\n ")
    print(" Second tour : ")
    print(" ")
    name, goal2, goal1, score2 = tri(name, goal2, goal1, score2)
    score2 = affichage2(name, goal2, score2) 
     
    print("\n ")
    print(" Classement Final : ")
    print(" ")
    #name, scoreFinal = triFinal(name, scoreFinal)
    scoreFinal = affichageFinal(name, scoreFinal)

  10. #10
    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,

    En Python, le code se résume à:
    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
    joueurs = ['Drogba', 'Owen', 'Henry']
    matches = [
        [ 10, 8, 6],
        [ 4, 6, 5],
        ]
    COUNT = len(joueurs)
     
    points = [ 6, 4, 2 ]
     
    def get_rank(match):
        return sorted(list(range(COUNT)), key= lambda x: match[x])
     
    totals = [0, ] * COUNT
     
    for match in matches:
        for i, x in enumerate(get_rank(match)):
            totals[i] += points[2-x]
     
    for i in range(COUNT):
        print(joueurs[i], totals[i])
    Après si vous voulez faire plus compliqué et qu'en plus vous n'arrivez pas à le faire marcher... c'est que vous avez plein de choses à apprendre.

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

  11. #11
    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
    Bonjour wiztricks,

    Dans mon cursus on ne peut utiliser des fonctions tels que sorted, enumerate , lambda , zip, etc...
    On veut vraiment nous apprendre à manipuler uniquement des tableaux et le tri en bulle.

  12. #12
    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
    Citation Envoyé par Tamzoro Voir le message
    Dans mon cursus on ne peut utiliser des fonctions tels que sorted, enumerate , lambda , zip, etc...
    On veut vraiment nous apprendre à manipuler uniquement des tableaux et le tri en bulle.
    sorted, enumerate,... sont des fonctions qui sont juste là pour éviter au développeur de perdre son temps à ré-écrive systématiquement des fonctions.
    Rien ne vous empêche d'essayer de comprendre ce que fait le code que j'ai écrit et d'essayer de le traduire dans votre Python réduit.... C'est aussi un bon exercice.

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

  13. #13
    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
    sorted, enumerate,... sont des fonctions qui sont juste là pour éviter au développeur de perdre son temps à ré-écrive systématiquement des fonctions.
    Rien ne vous empêche d'essayer de comprendre ce que fait le code que j'ai écrit et d'essayer de le traduire dans votre Python réduit.... C'est aussi un bon exercice.

    - W
    Sincèrement il est encore trop tôt pour que je puisse me calquer sur votre code. Je préfère pour le moment rester sur le mien.
    J'ai besoin d'une explication en lien à mon code s'il vous plait. Dans ma fonction printFinal(name, scoreFinal) en faisant plusieurs print je constate qu'il y a une erreur.

    Je pense qu'il y a un problème au niveau de mon output ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def printFinal(name, scoreFinal):
        print(score1)
        print(score2)
     
        for i in range(len(name)):
            scoreFinal.append(str(score1[i] + score2[i]))
            print("Nom : " + name[i] + " \t " + (scoreFinal[i]) + " points ")
     
        return scoreFinal
    Pourquoi les valeurs de score1 et score2 sont-ils identiques ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [2, 4, 6]
    [2, 4, 6]
    Nom : Henry      4 points
    Nom : Drogba     8 points
    Nom : Owen       12 points
    Merci

    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
     
    # --- Etape 1/ Afficher les noms des joeurs + points et buts 
    def affichage1(name, goal, score1):
        for i in range(len(name)):
            score1.append(point[i])
            print("Nom : " + name[i] + " \t " + str(score1[i]) + " points " + str(goal[i]) + " goals ")
     
        return score1 
     
    def affichage2(name, goal, score2):
        for i in range(len(name)):
            score2.append(point[i])
            print("Nom : " + name[i] + " \t " + str(score2[i]) + " points " + str(goal[i]) + " goals ")
     
        return score2
     
    # --- Etape 2/ Trier les points par rapport aux goals marqués  
    def tri(name, goal1, goal2, pts):
        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, pts 
     
    # --- Etape 3/ Afficher le nombre de points 
    def affichageFinal(name, scoreFinal):
        print(score1)
        print(score2)
     
        for i in range(len(name)):
            scoreFinal.append(str(score1[i] + score2[i]))
            print("Nom : " + name[i] + " \t " + str(scoreFinal[i]) + " points " )
     
        return scoreFinal
     
        print(scoreFinal)
     
     
     
    name = ["Henry", "Owen", "Drogba"]
    score1 = []
    score2 = []
    scoreFinal = []
    goal1 = [10,8,6]
    goal2 = [4,6,5]
    point = [2,4,6]
     
    print(" Premier tour : ")
    print(" ")
    name, goal1, goal2, score1 = tri(name, goal1, goal2, score1)
    score1 = affichage1(name, goal1, score1)
     
    print("\n ")
    print(" Second tour : ")
    print(" ")
    name, goal2, goal1, score2 = tri(name, goal2, goal1, score2)
    score2 = affichage2(name, goal2, score2) 
     
    print("\n ")
    print(" Classement Final : ")
    print(" ")
    #name, scoreFinal = triFinal(name, scoreFinal)
    scoreFinal = affichageFinal(name, scoreFinal)

  14. #14
    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
    J'ai besoin d'une explication en lien à mon code s'il vous plait.
    C'est vous qui avez écrit ce code là.
    Vous êtes donc supposé comprendre ce qu'il fait i.e. savoir relire ce que vous avez écrit.

    Citation Envoyé par Tamzoro Voir le message
    Dans ma fonction printFinal(name, scoreFinal) en faisant plusieurs print je constate qu'il y a une erreur.

    Je pense qu'il y a un problème au niveau de mon output ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def printFinal(name, scoreFinal):
        print(score1)
        print(score2)
        ...
    L'output est ce qu'affiche "print" et çà se contente d'afficher le contenu des listes associées aux variables score1, score2... contenu qui a été assigné bien plus tôt par votre code et que vous pouvez "tracer". Par exemple en affichant avec "print" son contenu chaque fois que vous voyez "score2 = ...".

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

  15. #15
    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
    L'output est ce qu'affiche "print" et çà se contente d'afficher le contenu des listes associées aux variables score1, score2... contenu qui a été assigné bien plus tôt par votre code et que vous pouvez "tracer". Par exemple en affichant avec "print" son contenu chaque fois que vous voyez "score2 = ...".

    - W
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [2, 4, 6]
    [2, 4, 6]
    Nom : Henry      4 points
    Nom : Drogba     8 points
    Nom : Owen       12 points
    Regardez le [2,4,6] (score1) et le [2,4,6] (score2)
    Normalement Henry doit obtenir la somme final de 8 points c'est pour ça que ça marche pas !!




    Je ne sais pas si vous avez compris ce que j'essaye d'expliquer ? A l'affichage du premier tour et du second le tri semble être correcte par conséquent je ne comprends pas pourquoi les scores ne respectent pas le tri ?

  16. #16
    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
    Citation Envoyé par Tamzoro Voir le message
    Je ne sais pas si vous avez compris ce que j'essaye d'expliquer ? A l'affichage du premier tour et du second le tri semble être correcte par conséquent je ne comprends pas pourquoi les scores ne respectent pas le tri ?
    Vous n'avez rien à expliquer, tout est dans votre code.
    Et ce code est illisible!
    Regardez simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def tri(name, goal1, goal2, pts):
        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, pts
    Elle range les 3 listes name, goal1, goal2 suivant le tri par ordre croissant de goal1.
    Et comme ça range les 3 listes plutôt que de retourner une liste de classements, lorsque vous allez faire la somme l'ordre ne sera plus cohérent avec les points qui ont été assignés.
    Et çà fait plusieurs fois que je vous l'écris... Comme vous ne le comprenez pas, c'est probablement que je m'y prends mal mais si vous ne comprenez pas ce que je dis et répète, tant pis pour vous.

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

  17. #17
    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 ?

  18. #18
    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
    Citation Envoyé par Tamzoro Voir le message
    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 ?
    Comment voulez vous trier en fonction d'une information (scoreFinal) que vous n'avez pas encore?

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

  19. #19
    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 wiztricks,

    Pouvez-vous nous donner un exemple relatif au tri en bulle identique à mon exercice ?

    Merci

  20. #20
    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
    Pouvez-vous nous donner un exemple relatif au tri en bulle identique à mon exercice ?
    La fonction "tri" que vous avez écrite est déjà un exemple de tri à bulle...
    Le problème est dans ce que vous lui faite trier.

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

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