Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1129 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Créer un classement en python 2.7

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Créer un classement en python 2.7

n°2255476
hypone
Posté le 11-04-2015 à 15:44:10  profilanswer
 

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.

mood
Publicité
Posté le 11-04-2015 à 15:44:10  profilanswer
 

n°2255484
masklinn
í dag viðrar vel til loftárása
Posté le 11-04-2015 à 18:08:08  profilanswer
 

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

---------------
I've never understood the compulsion to use Web technologies minus the Web's security and deployment models. It seems a bit like throwing the orange away and eating the peel. — @ justinschuh‬
n°2255493
hypone
Posté le 11-04-2015 à 18:45:35  profilanswer
 

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
n°2255514
masklinn
í dag viðrar vel til loftárása
Posté le 11-04-2015 à 21:41:37  profilanswer
 

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?


---------------
I've never understood the compulsion to use Web technologies minus the Web's security and deployment models. It seems a bit like throwing the orange away and eating the peel. — @ justinschuh‬
n°2255527
hypone
Posté le 12-04-2015 à 12:00:33  profilanswer
 

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  
 
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Créer un classement en python 2.7

 

Sujets relatifs
Créer des séries à partir de plusieurs colonnes d'une tableCréer une classe pour se connecter au ftp
programmation score de tennis python pygameCréer un formulaire pour sélectionner des PDF à inclure dans un zip ?
[python] 2048 intelligence artificielleaide pour programme python !
Débutant python dictionnaire sérialiséCréer une application qui utilise une autre application.
[Python] Occurence d'une listeCréer une fonction acceptant divers arguments en C
Plus de sujets relatifs à : Créer un classement en python 2.7


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR