Python : liste de liste, exercice

Python : liste de liste, exercice - Python - Programmation

Marsh Posté le 14-01-2009 à 12:58:01    

Heurm heurm, bonjour à tous^^ j'aurais besoin d'un petit coup de main, si vous pouviez m'aider siouplait !! :)  
 
Alors, je voudrais créer un programme Python, qui utilise une liste de listes.
Ce serait un programme pour un professeur, qui lui permettrait de saisir le nom de ses élèves, puis les notes de chaque élève (sachant qu'il peut y avoir plusieurs notes par élève).  
 
Déjà, ça je n'y arrive pas .........
Je voudrais ensuite que le programme puisse dire quel est l'élève avec la meilleure moyenne, celui avec la pire, et la moyenne générale de la classe...
 
 
Est ce que quelqu'un peut m'aider avec toutes ces indications svp ? je n'ai jamais fait de liste de listes, et étant une piètre débutante en Python, je n'arrive à rien...
 
Merci  beaucoup !

Reply

Marsh Posté le 14-01-2009 à 12:58:01   

Reply

Marsh Posté le 14-01-2009 à 13:36:59    

J'ai fait ça pour l'instant mais ça ne marche pas, et ce n'est pas complet vu que ça ne demande pas le nbre de notes par élèves....

Code :
  1. def SaisiNomNote(N):
  2.      Nom = ""
  3.      liste = []
  4.      Note = 0
  5.      for i in range(N):
  6.           Nom= raw_input("Nom:" )
  7.           Note= input("Note:" )
  8.           liste.append([Nom,Note])
  9.      return liste
  10. N=input("Combien d'élèves?" )
  11. T= SaisiNomNote(N)
  12. print T


Message édité par rionma33 le 14-01-2009 à 13:37:38
Reply

Marsh Posté le 19-01-2009 à 09:30:01    

qu'est-ce qui ne marche pas ? (outre le fait que ce n'est pas complet)

 

et plutôt qu'une simple liste, j'utiliserais un dictionnaire...
tu aurais ainsi un dictionnaire où la clef est le nom, et la valeur est une liste de notes, ça évite de mélanger des variables de type différent (nom & notes) au sein d'une même liste.

 

par exemple (à créer dynamiquement):

Code :
  1. notes = dict({ 'marcel': [12,14,8],
  2.     'jules': [12,12,10,16],
  3.     'alphonse': [12,2] })
 

PS: pour un programme définitif, input n'est pas recommandé car l'entrée est interprétée et donc potentiellement plantogène si on tape une expression python.

 

Message cité 1 fois
Message édité par darkpenguin le 19-01-2009 à 09:32:45

---------------
Counting all the assh*les in the room, well I'm definitely not alone...
Reply

Marsh Posté le 20-01-2009 à 13:00:06    

darkpenguin a écrit :

qu'est-ce qui ne marche pas ? (outre le fait que ce n'est pas complet)

 

et plutôt qu'une simple liste, j'utiliserais un dictionnaire...
tu aurais ainsi un dictionnaire où la clef est le nom, et la valeur est une liste de notes, ça évite de mélanger des variables de type différent (nom & notes) au sein d'une même liste.

 

par exemple (à créer dynamiquement):

Code :
  1. notes = dict({'marcel': [12,14,8],
  2.     'jules': [12,12,10,16],
  3.     'alphonse': [12,2] })
 

PS: pour un programme définitif, input n'est pas recommandé car l'entrée est interprétée et donc potentiellement plantogène si on tape une expression python.


J'aurais tendance à faire pareil, mais sans faire n'importe quoi sur la syntaxe:

Code :
  1. notes = {
  2.    'marcel': [12, 14, 8],
  3.    'jules': [12, 12, 10, 16],
  4.    'alphonse': [12, 2]
  5. }


est la syntaxe littérale pour un dict python, pas besoin de filter ça au constructeur, le seul effet de filer tout ça à dict c'est de consommer plus de ressources et de rendre le code moins lisible.

 

Une alternative est néamoins d'utiliser les kwargs de dict():

Code :
  1. notes = dict(marcel=[12, 14, 8], jules=[12, 12, 10, 16], alphonse=[12, 2])


Certains préfèrent cette syntaxe.

 

Et pour étendre là dessus, à partir du moment ou le dict est rempli, il est aisé de récupérer la plus basse moyenne avec min(iterable[, key=id]), la plus haute avec max(iterable[, key=id]) (en utilisant la même fonction de clé, passant e.g. par dict.iteritems()), et la moyenne globale de la classe est tout aussi aisée à obtenir.

Message cité 1 fois
Message édité par masklinn le 21-01-2009 à 15:26:24

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

Marsh Posté le 22-01-2009 à 09:34:18    

masklinn a écrit :


J'aurais tendance à faire pareil, mais sans faire n'importe quoi sur la syntaxe:

Code :
  1. notes = {
  2.    'marcel': [12, 14, 8],
  3.    'jules': [12, 12, 10, 16],
  4.    'alphonse': [12, 2]
  5. }


est la syntaxe littérale pour un dict python, pas besoin de filter ça au constructeur, le seul effet de filer tout ça à dict c'est de consommer plus de ressources et de rendre le code moins lisible.
 
Une alternative est néamoins d'utiliser les kwargs de dict():

Code :
  1. notes = dict(marcel=[12, 14, 8], jules=[12, 12, 10, 16], alphonse=[12, 2])


Certains préfèrent cette syntaxe.
 
Et pour étendre là dessus, à partir du moment ou le dict est rempli, il est aisé de récupérer la plus basse moyenne avec min(iterable[, key=id]), la plus haute avec max(iterable[, key=id]) (en utilisant la même fonction de clé, passant e.g. par dict.iteritems()), et la moyenne globale de la classe est tout aussi aisée à obtenir.


 
 :jap:  
effectivement, passer un dict au constructeur du dict c'est pas optimal :pt1cable:  
merci pour cette correction :)  


---------------
Counting all the assh*les in the room, well I'm definitely not alone...
Reply

Sujets relatifs:

Leave a Replay

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