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



    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
    Je sais depuis hier !
    Faut-il alors trier les score1 et score2 ? Est-ce que mon tri est maintenant correct ?
    Je pense qu'il y a maintenant un problème au niveau des attributions des points au premier tour ainsi qu'au second?

    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
     
    # --- 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, score1, score2):
        swap = True
        while swap:
            swap = False
            for i in range(len(name) - 1):
                if score1[i + 1] < score1[i]:
                    name[i], name[i + 1] = name[i + 1], name[i]
                    score1[i], score1[i + 1] = score1[i + 1], score1[i]
                    score2[i], score2[i + 1] = score2[i + 1], score2[i]
                    swap = True
        return name, score1, score2 
     
    # --- 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
     
    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(" ")
    #tri(name, score1, score2)
    score2 = affichage2(name, goal2, score2) 
     
    print("\n ")
    print(" Classement Final : ")
    print(" ")
    #name, scoreFinal = triFinal(name, scoreFinal)
    tri(name, score1, score2)
    scoreFinal = affichageFinal(name, scoreFinal)

  2. #22
    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
    J'aimerais bien aussi savoir comment fait-on pour attribuer les points correctement aux joueurs visiblement il ne faut pas passer par un tri.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    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

  3. #23
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par Tamzoro Voir le message
    J'aimerais bien aussi savoir comment fait-on pour attribuer les points correctement aux joueurs visiblement il ne faut pas passer par un tri.
    Vous pourriez dans un premier temps passer par un tri (et comme vous avez déjà une fonction de tri qui sait trier une colonne en fonction d'une autre, la modifier pour retourner un classement).
    Ceci dit, dans un classement vous pouvez avoir des ex aequo... et donc il va falloir faire plus qu'un simple tri.
    Plus généralement, vous devriez commencer par faire vos opérations sur une feuille de papier: classer en fonction du nombre de buts, assigner des points en fonction du classement,... Puis lorsque çà fonctionne, essayez d'automatiser ces opérations avec du code. Là vous écrivez du code qui n'a aucune chance de fonctionner même sur le papier.

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

  4. #24
    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

    Je vais revoir mon code en tout les cas merci pour vos conseils et pour votre patience.

  5. #25
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Par défaut
    Sincèrement sans dicos je vois pas trop...Sauf salement comme ceci :

    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    # -*- coding: cp1252 -*-
     
    # --- Etape 1/ Afficher les noms des joeurs + points et buts 
    def affichage1(name, goal, score1):
        for i in range(len(name)):
            if name[i]=="Henry":
                scoreHenry.append(point[i])
            if name[i]=="Owen":
                scoreOwen.append(point[i])
            if name[i]=="Drogba":
                scoreDrogba.append(point[i])
            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)):
            if name[i]=="Henry":
                scoreHenry2.append(point[i])
            if name[i]=="Owen":
                scoreOwen2.append(point[i])
            if name[i]=="Drogba":
                scoreDrogba2.append(point[i])
            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)
        #print scoreHenry, scoreHenry2
     
        for i in range(len(name)):
            if name[i]=="Henry":
                scoreFinal.append(str(scoreHenry[0]+scoreHenry2[0]))
            if name[i]=="Owen":
                scoreFinal.append(str(scoreOwen[0]+scoreOwen2[0]))
            if name[i]=="Drogba":
                scoreFinal.append(str(scoreDrogba[0]+scoreDrogba2[0]))
            #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 = []
    scoreHenry=[]
    scoreHenry2=[]
    scoreDrogba=[]
    scoreDrogba2=[]
    scoreOwen=[]
    scoreOwen2=[]
    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)
    Mais bon....C'est pas top top

  6. #26
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fawn_noOb_wxPython Voir le message
    Mais bon....C'est pas top top
    C'est le moins qu'on puisse dire. Moi de mon côté ça fait bien longtemps que j'ai décroché car je pige rien à ce qu'il veut faire (et en plus j'ai horreur du foot). Mais ton code dont les noms des variables sont en fait leur valeur ça c'est worst collector
    Allez, +1 pour m'avoir fait rire...
    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]

  7. #27
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Par défaut
    Je déteste le foot aussi, enfin bon le truc qu'il veut faire c'est juste 1) Calculer les points des joueurs en fonctions des buts marqués en 2 tours 2) Trier les noms en fonction du nombre de points sur les deux tours 3) Faire un calcul du nombre final de point pour chaque joueur (on additionne les valeurs des 2 tours) et l'afficher.

    Mais tout ça sans créer de dico....

  8. #28
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par Fawn_noOb_wxPython Voir le message
    Mais tout ça sans créer de dico....
    Cà se fait en une poignée de lignes de code comme montré ici et c'est un bon exercice pour réviser un peu les bases du langage.

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

  9. #29
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Cà se fait en une poignée de lignes de code comme montré ici et c'est un bon exercice pour réviser un peu les bases du langage.

    - W
    Oui , le truc se situe au niveau de la "key" du sorted Mais apparemment il ne pourrait pas utiliser ce genre de fonctions...

    Par contre je n'ai pas compris cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    totals[i] += points[2-x]
    Pourquoi "2-x" ? C'est le [ len(points)-x] ???

  10. #30
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Citation Envoyé par Fawn_noOb_wxPython Voir le message
    Oui , le truc se situe au niveau de la "key" du sorted Mais apparemment il ne pourrait pas utiliser ce genre de fonctions...
    Certes mais ranger une liste en fonction du tri d'une autre est déjà ce que fait la fonction de tri écrite par le PO. Donc il sait le faire mais il n'a pas encore compris qu'il savait.


    Citation Envoyé par Fawn_noOb_wxPython Voir le message
    Par contre je n'ai pas compris cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    totals[i] += points[2-x]
    Pourquoi "2-x" ? C'est le [ len(points)-x] ???
    C'est parce qu'au départ j'ai inversé la liste point car il me semblait plus logique d'attribuer plus de points au premier, un peu moins au second... et j'espérais que sorted(..., reverse=True) allait trier la liste en décroissant. En fait, çà se contente d'inverser la liste résultante... et le résultat est faux... d'où cet infâme bricolage.

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

  11. #31
    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
    Hello tout le monde,

    Merci beaucoup Fawn_noOb_wxPython ça fonctionne tu es arrivé au résultat que je souhaitais obtenir.
    Je n’avais pas pensé à créer deux tableaux pour chaque joueur regroupant les points…

    scoreHenry=[]
    scoreHenry2=[]
    scoreDrogba=[]
    scoreDrogba2=[]
    scoreOwen=[]
    scoreOwen2=[]

    Moi je pensais plutôt stocker les valeurs dans deux tableaux score1[] et score2[]

  12. #32
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tamzoro Voir le message
    scoreHenry=[]
    scoreHenry2=[]
    scoreDrogba=[]
    scoreDrogba2=[]
    scoreOwen=[]
    scoreOwen2=[]
    Ah ouais, pour de bon ! Tu as pris le pire des codes qui puisse se concevoir et tu l'as adopté !!!
    Sans déconner, tu n'as pas vu la petite mention de Fawn_noOb_wxPython "comme salement" ?

    Alors ok ça fonctionne maintenant. Mais que feras-tu si tu dois demain rajouter un joueur ? Rajouter 10 joueurs ?? rajouter 100 joueurs ??? Et si finalement on ne veut plus regarder les scores de Owen mais ceux de Borini ?

    Il n'y a pas de règle absolue pour "bien coder" mais déjà il y a des règles pour "éviter de mal coder". L'une d'entre elles est par exemple de ne pas donner à une variable un nom lié à sa valeur. Si je dois stocker un nom, j'utiliserai une variable "nom" et pas une variable "nomTamzoro" parce que ce nom peut contenir n'importe quel nom et non pas un nom particulier (on peut affiner bien sûr, comme "nomFamille" ou "nomMarital", mais toujours en restant détaché du contenu). Une autre est que si on doit gérer "n" éléments, alors on utilise une liste element=[] sur laquelle on va itérer et qu'on peut faire évoluer en une instruction et non pas une suite "element1", "element2", "element3", etc complètement figée, pour laquelle toute évolution (rajout/suppression) se traduira par des dizaines de lignes de code à rajouter ou à enlever.
    Le but d'un code n'est pas que fonctionner ; mais aussi pouvoir évoluer. wiztricks avait pourtant donné des pistes...
    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]

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