INFO803 : Python, seance 1

De Wiki du LAMA (UMR 5127)
Révision datée du 9 février 2010 à 15:37 par Lachaud (discussion | contributions) (Correction INFO803 / Seance 1)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

<source lang=python>

  1. -*- coding: utf-8 -*-


class Etudiant:

   """Définit le type Etudiant."""
   def __init__(self, p, n, a):

"Constructeur. Crée un étudiant de nom <n>, de prénom

, d'age <a>" self.nom = n self.prenom = p self.age = a self._notes = [] self._modules = [] def qui_suis_je(self): "Affiche l'étudiant sur la terminal." print "Je suis %s %s et j'ai %d ans." % (self.prenom, self.nom, self.age) def annee_naissance(self,annee): """Retourne l'année de naissance de l'étudiant si <annee> est bien l'annee courante""" return annee - self.age def ajoute_note(self, module, note ): """Ajoute à l'étudiant sa note <note> dans son module <module>.""" if module in self._modules: print( "Erreur. L'étudiant a déjà une note dans ce module." ) else: self._modules.append( module ) self._notes.append( note ) def change_note(self, module, note ): """Change à l'étudiant sa note <note> dans son module <module>.""" if module in self._modules: idx = self._modules.index( module ) self._notes[ idx ] = note else: print( "Erreur. L'étudiant n'a pas déjà une note dans ce module." ) def supprime_note(self, module ): """Supprime à l'étudiant sa note dans son module <module>.""" if module in self._modules: idx = self._modules.index( module ) self._modules.pop( idx ) self._notes.pop( idx ) else: print( "Erreur. L'étudiant n'a pas déjà une note dans ce module." ) def modules( self ): """Retourne la liste des modules suivis par l'étudiant.""" return self._modules def notes( self ): """Retourne la liste des notes obtenus par l'étudiant, dans l'ordre des modules suivis.""" return self._notes def moyenne( self ): m = 0.0 for n in self._notes: m = m + float( n ) return m / float( len( self._notes ) ) def annees_naissance( l, a ): """Affiche les années de naissance de tous les étudiants de la liste <l> si on lui donne l'année en cours <a>.""" for e in l: print( "%s %s est né(e) en %d." % ( e.prenom, e.nom, e.annee_naissance( a ) ) ) def major( l ): """Retourne l'étudiant qui a la meilleure moyenne dans la liste d'étudiants <l>.""" maj = l[ 0 ] for e in l[1:]: if e.moyenne() > maj.moyenne(): maj = e return maj

  1. Façon basique avec des listes.

def modules_suivis( l ): """Retourne la liste des modules suivis par au moins un étudiant de la liste <l>.""" mods = [] for e in l: for m in e.modules(): if not ( m in mods ): mods.append( m ) return mods

  1. Façon avec des objets ensemble (set).

def modules_suivis2( l ): """Retourne la liste des modules suivis par au moins un étudiant de la liste <l>.""" mods = set() for e in l: mods.update( e.modules() ) return mods

  1. Prog principal.

e1 = Etudiant( "George", "Habchi", 22 ) e2 = Etudiant("Joseph","Staline",23) e3 = Etudiant("Youri", "Gagarine", 43) e4 = Etudiant("John", "Travolta", 24) l = [e1,e2,e3,e4] annees_naissance( l, 2010 ) e1.ajoute_note("INFO803",15) e1.ajoute_note("INFO719",18) e2.ajoute_note("INFO803",13) e2.ajoute_note("INFO719",19) e2.ajoute_note("INFO817",14) e3.ajoute_note("INFO803",12) e3.ajoute_note("INFO719",11) e4.ajoute_note("INFO803",17) e4.ajoute_note("INFO817",17) e4.ajoute_note("INFO804",16) print( e1.modules() ) print( e1.notes() ) print( e1.moyenne() ) e = major( l ) print( "Major: %s %s avec %f" % ( e.prenom, e.nom, e.moyenne() ) ) print( modules_suivis( l ) ) print( modules_suivis2( l ) ) </source>