Créer un classement en python 2.7

Créer un classement en python 2.7 - Python - Programmation

Marsh Posté le 11-04-2015 à 15:44:10    

Bonjour, j'aimerai créer un classement par rapport à un goalverage j'ai déjà créer les fonctions qui donne le goalverage des qu'on tape le nom d'un club il nous le donne, maitenant j'aimerai les classer par rapport à ça.
 
 

Code :
  1. #importation
  2. import csv
  3. #Fonction
  4. csvfile = open ("ligue1.data", "rb" )
  5. lines = csv.reader(csvfile)
  6. ListeClub = ["Ajaccio","Bastia","Bordeaux","Evian","Guingamp","Lille","Lorient","Lyon","Marseille","Monaco","Montpellier","Nantes","Nice","Paris","Reims","Rennes","Saint-Etienne","Sochaux","Toulouse","Valenciennes"]
  7. ClassementGolaverage=[]
  8. #But marque
  9. def ButMarqueDomicile(y,DesLignes,UneListe):
  10.      csvfile = open ("ligue1.data", "rb" )
  11.      DesLignes=csv.reader(csvfile)
  12.      UneListe=ListeClub
  13.      pointeur_liste=ListeClub.index(y)
  14.      sommebutdomicile = 0
  15.      k = 0
  16.      for row in DesLignes:
  17.           if row[1] == ListeClub[pointeur_liste]:
  18.                k = int(row[3])
  19.                sommebutdomicile += k
  20.      return(sommebutdomicile)
  21. def ButMarqueExterieur(y,DesLignes,UneListe):
  22.      csvfile = open ("ligue1.data", "rb" )
  23.      DesLignes=csv.reader(csvfile)
  24.      UneListe=ListeClub
  25.      pointeur_liste=ListeClub.index(y)
  26.      sommebutexterieur = 0
  27.      e = 0
  28.      for row in DesLignes:
  29.           if row[2] == ListeClub[pointeur_liste]:
  30.                e = int(row[4])
  31.                sommebutexterieur += e
  32.      return(sommebutexterieur)
  33. #but encaisse
  34. def ButEncaisseDomicile(y,DesLignes,UneListe):
  35.      csvfile = open ("ligue1.data", "rb" )
  36.      DesLignes=csv.reader(csvfile)
  37.      UneListe=ListeClub
  38.      pointeur_liste=ListeClub.index(y)
  39.      sommebutencaissedomicile = 0
  40.      k = 0
  41.      for row in DesLignes:
  42.           if row[1] == ListeClub[pointeur_liste]:
  43.                k = int(row[4])
  44.                sommebutencaissedomicile += k
  45.      return(sommebutencaissedomicile)
  46. def ButEncaisseExterieur (y,DesLignes,UneListe):
  47.      csvfile = open ("ligue1.data", "rb" )
  48.      DesLignes=csv.reader(csvfile)
  49.      UneListe=ListeClub
  50.      pointeur_liste=ListeClub.index(y)
  51.      sommebutexterieur = 0
  52.      e = 0
  53.      for row in DesLignes:
  54.           if row[2] == ListeClub[pointeur_liste]:
  55.                e = int(row[3])
  56.                sommebutexterieur += e
  57.      return(sommebutexterieur)
  58. #Goalaverage
  59. def Goalaverage():
  60.      y=input("Entrez le nom d'un club de Ligue 1 :" )
  61.      while y not in ListeClub:
  62.           y=input("Entrez le nom d'un autre club de Ligue 1 :" )
  63.      a=ButMarqueDomicile(y,lines,ListeClub)
  64.      b=ButMarqueExterieur(y,lines,ListeClub)
  65.      c=ButEncaisseDomicile(y,lines,ListeClub)
  66.      d=ButEncaisseExterieur(y,lines,ListeClub)
  67.      e=a+b
  68.      f=c+d
  69.      return(e-f)


 
Tous d'abord je voulais créer une fonction qui donne le goalaverage de chaque club, puis qui les transferts dans une liste vide et qui les tris par ordre croissant(je sais pas si c'est la bonne solution)  
donc j'ai fais ça:
 

Code :
  1. def afficherGolaverage():
  2.      for y in ListeClub:
  3.           a=ButMarqueDomicile(y,lines,ListeClub)
  4.           b=ButMarqueExterieur(y,lines,ListeClub)
  5.           c=ButEncaisseDomicile(y,lines,ListeClub)
  6.           d=ButEncaisseExterieur(y,lines,ListeClub)
  7.           e=a+b
  8.           f=c+d
  9.      return(e-f)


Mais il m'affiche toujours le goalaverage du dernier élément de la liste, J'ai essayé d'ajouter une boucle pour le faire parcourir les éléments de liste mais ça ne marche pas, si quelqu'un peut m'aider merci.

Reply

Marsh Posté le 11-04-2015 à 15:44:10   

Reply

Marsh Posté le 11-04-2015 à 18:08:08    

hypone a écrit :

Tous d'abord je voulais créer une fonction qui donne le goalaverage de chaque club, puis qui les transferts dans une liste vide et qui les tris par ordre croissant(je sais pas si c'est la bonne solution)
donc j'ai fais ça:
 

Code :
  1. def afficherGolaverage():
  2.      for y in ListeClub:
  3.           a=ButMarqueDomicile(y,lines,ListeClub)
  4.           b=ButMarqueExterieur(y,lines,ListeClub)
  5.           c=ButEncaisseDomicile(y,lines,ListeClub)
  6.           d=ButEncaisseExterieur(y,lines,ListeClub)
  7.           e=a+b
  8.           f=c+d
  9.      return(e-f)


Mais il m'affiche toujours le goalaverage du dernier élément de la liste


Bah oui c'est ce que tu lui demandes, pour chaque club tu définis un e et un f mais au lieu de les garder dans un coin tu les écrases au tour de boucle suivant, et tu n'utilises en fait que les derniers e et f définis (ceux du dernier club de ta liste, donc).

 

Accessoirement, beaucoup de n'importe quoi dans ton truc: tu lis le fichier CSV en début de script puis tu l'ignores, et chaque fonction d'extraction de données doit aller rouvrir le fichier, le lire, essayer de trouver la bonne ligne dedans, et extraire la donnée qui va bien. Ça fait une chiée d'opérations inutiles, serait plus fin de générer un dictionnaire {club: {for_home, for_out, against_home, against_out}}. Les fonctions d'extraction deviennent triviales, et peuvent même être enlevées complètement. Au final, le script complet devrait prendre ~15 lignes, et encore.

 

Accessoirement, ce que tu calcules ici c'est le goal difference (buts marqués - buts encaissés) pas le goal average (buts marqués / buts encaissés).


Message édité par masklinn le 11-04-2015 à 18:08:49

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-04-2015 à 18:45:35    

Merci pour ton aide, Je ne comprend pas ce que tu me conseilles de mettre dans un dictionnaire car pour un dictionnaire c'est une valeur et une key, pour mon script à la base il était plus épuré il n'avait pas les lignes :  
csvfile = open ("ligue1.data", "rb" )
     DesLignes=csv.reader(csvfile)
     UneListe=ListeClub
     pointeur_liste=ListeClub.index(y)
mais def Goalaverage m'afficher toujours 0  vu qu'avec ces 4 lignes ça marché je suis passé à la suite, merci  pour goal difference je ne savais pas mais je vais laissé goal average c'est plus parlant

Message cité 1 fois
Message édité par hypone le 11-04-2015 à 21:42:29
Reply

Marsh Posté le 11-04-2015 à 21:41:37    

hypone a écrit :

Merci pour ton aide, Je ne comprend pas ce que tu me conseilles de mettre dans un dictionnaire car pour un dictionnaire c'est une valeur et une key


La clé est le nom du club, la valeur est un autre dictionnaire avec les buts marqués à domicile, les buts marqués à l'extérieur, les buts encaissés à domicile et les buts encaissés à l'extérieur [:spamafote]

hypone a écrit :

merci  pour goal difference je ne savais pas mais je vais laissé goal average c'est plus parlant


En quoi c'est plus parlant si c'est absolument pas ce que tu calcules?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-04-2015 à 12:00:33    

Bonjour,
 

Citation :

La clé est le nom du club, la valeur est un autre dictionnaire avec les buts marqués à domicile, les buts marqués à l'extérieur, les buts encaissés à domicile et les buts encaissés à l'extérieur [:spamafote]


 
Je crois avoir compris, mais comment faire pour mettre mais valeur but marqués à domicile qui sont calculé dans ma fonction ButMarqueDomicile dans un dictionnaire, j'arrive pas non plus à les mettre dans une liste même avec une boucle  
 

Citation :

En quoi c'est plus parlant si c'est absolument pas ce que tu calcules?


 
Pour la plus part des gens goal average == goal difference  
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed