Gestion d’une promotion d’étudiants¶
12-01-2022
Objectifs
manipuler un grand ensemble de données
se familiariser avec des structures de données itérables
Le module etudiants
¶
Dans ce TP vous allez travailler avec un module construit par nos soins.
Ce module se nomme etudiants
et vous pouvez le récupérer en téléchargeant
l’archive etudiants.zip, et en la décompressant dans le dossier dans lequel vous
allez travailler (c’est-à-dire, le dossier dans lequel vous sauvegarderez le ou
les fichiers que vous réaliserez).
Vous pouvez étudier le contenu du fichier etudiants.py
que vous obtiendrez après décompression
si vous le souhaitez, mais ce n’est pas
nécessaire pour le travail que vous aurez à faire.
En aucun cas vous ne pouvez le modifier pour ce TP.
En revanche, pour pouvoir utiliser ce module vous aurez à utiliser la commande
from etudiants import L_ETUDIANTS
Ce module ne définit qu’une seule variable nommée L_ETUDIANTS
dont la valeur est une liste ne
contenant que des dictionnaires à cinq clés représentant chacun un étudiant.
Les clés sont
'nip'
: la valeur associée est un numéro unique identifiant un étudiant (c’est l’équivalent du numéro d’étudiant figurant sur votre carte d’étudiant, mais ce n’est pas ce numéro)'nom'
et'prenom'
: les valeurs associées sont les nom et prénom d’un étudiant'formation'
: la valeur associée est le parcours de l’étudiant : LICAM, MASS, PEIP ou SESI'groupe'
la valeur associée est le numéro du groupe de l’étudiant.
Les valeurs associées à ces clés sont toutes des chaînes de caractères (str
).
Le travail à effectuer¶
Préliminaire¶
À faire
Réalisez un prédicat pour_tous
paramétré par un itérable qui renvoie True
si et seulement si tous les éléments de l’itérable passé en paramètre sont vrais et False
dans le cas contraire.
- tp_gestion_promo_etudiants.pour_tous(seq_bool)¶
- Paramètres
seq_bool – (list ou tuple) séquence de booléens
- Renvoie
(bool)
True si seq_bool ne contient pas le booléen False
False sinon
- CU
aucune
- Exemples
>>> pour_tous([]) True >>> pour_tous((True, True, True)) True >>> pour_tous((True, False, True)) False
À faire
Réalisez un prédicat il_existe
paramétré par un itérable qui renvoie True
si et seulement si il existe un élément de l’itérable passé en paramètre qui est vrai et qui renvoie False
dans le cas contraire.
- tp_gestion_promo_etudiants.il_existe(seq_bool)¶
- Paramètres
seq_bool – (list ou tuple) séquence de booléens
- Renvoie
(bool)
True si seq_bool contient au moins une valeur True
False sinon
- CU
aucune
- Exemples
>>> il_existe([]) False >>> il_existe((False, True, False)) True >>> il_existe((False, False)) False
À faire
En utilisant la fonction help
, lisez la documentation des fonctions prédéfinies all
et any
.
À partir de maintenant, vous pouvez les utiliser …
À faire : Question 0
Définissez une variable COURTE_LISTE
de type list
formée par les dix premiers éléments de la liste L_ETUDIANTS
Vous utiliserez cette variable pour réaliser les doctests des fonctions que vous serez amenés à réaliser.
À faire : Question 1
Réalisez un prédicat est_liste_d_etudiants
qui teste si son paramètre x
est bien du type décrit ci-dessus, c’est-à-dire une liste de dictionnaires, chaque dictionnaire ayant bien les cinq clés mentionnées ci-dessus. Utilisez ce prédicat pour vérifier que L_ETUDIANTS
est bien du type annoncé au début du tp. En voici la spécification
- tp_gestion_promo_etudiants.est_liste_d_etudiants(x)¶
- Paramètres
x – (tout)
- Renvoie
(bool)
True si
x
est une liste de fiches d’étudiant,False dans le cas contraire.
- CU
aucune
- Exemples
>>> est_liste_d_etudiants(COURTE_LISTE) True >>> est_liste_d_etudiants("Timoleon") False >>> est_liste_d_etudiants([('12345678', 'Calbuth', 'Raymond', 'Danse', '12') ]) False
Indication : définissez d’abord un prédicat pour tester si le paramètre est ou non une fiche d’étudiants, puis utilisez votre fonction pour_tous
que vous avez définie, ou bien la fonction prédéfinie all
.
Gestion de la promotion¶
À faire : Question 2
Combien de fiches d’étudiants contient la liste L_ETUDIANTS
? Définissez une variable NBRE_FICHES
avec cette valeur.
À faire : Question 3
Définissez une variable NIP
avec la valeur de votre numéro d’étudiant.
Quel est le contenu de la fiche se trouvant à l’indice égal à votre numéro d’étudiants modulo le nombre de fiches ?
À faire : Question 4
Réalisez une fonction liste_des_formations
paramétrée par une liste de fiches d’étudiants l
et qui renvoie une liste des formations. En voici la spécification
- tp_gestion_promo_etudiants.liste_des_formations(liste)¶
- Paramètres
liste – (list) une liste de fiches d’étudiants
- Renvoie
(list) une liste de chaînes de caractères donnant les formations présentes dans les fiches d’étudiants
- CU
liste ne contient que des fiches d’étudiants
- Exemples
>>> sorted(liste_des_formations(COURTE_LISTE)) == ['LICAM', 'MASS', 'PEIP', 'SESI'] True >>> sorted(liste_des_formations(COURTE_LISTE[0:2])) == ['PEIP', 'SESI'] True
À faire : Question 5
On donne le corps d’une fonction nommée paramétrée par une liste d’étudiants. Nommez judicieusement cette fonction et écrire sa documentation (avec exemples).
def nom_pas_judicieux(liste):
res = {}
for etud in liste:
prenom = etud['prenom']
if prenom in res:
res[prenom] = res[prenom] + 1
else:
res[prenom] = 1
return res
Combien d’étudiants se prénomment-ils Alexandre ? et Camille ?
Combien de parcours de la liste passée en paramètre cette fonction nécessite-t-elle ?
À faire : Question 6
Combien y a-t-il de prénoms différents parmi tous les étudiants ?
À faire : Question 7
Quel est le ou les prénom(s) le plus fréquent (il peut y avoir des ex aequo)?
À faire : Question 8
En utilisant une fonction occurrences_nip
analogue à occurrences_prenoms
, vérifiez que les identifiants (nip
) des étudiants sont tous distincts.
À faire : Question 9
En un seul parcours de la liste des étudiants, déterminez le nombre d’étudiants dans chacune des formations. Votre fonction devra fournir un résultat correct avec une liste d’étudiant contenant d’autres formations que celles présentes dans la liste donnée en exemple.
À faire : Question 10
Réalisez une fonction nommée liste_formation
qui construit la
liste des étudiants de la formation donnée en paramètre. Cette
liste contient des quadruplets (nip, nom, prenom, gpe)
.
- tp_gestion_promo_etudiants.liste_formation(liste, form)¶
- Paramètres
liste – (list) une liste de fiches d’étudiants
form – (str) une formation
- Renvoie
(list) la liste des étudiants de la formation
form
sous forme d’un quadruplet (nip, nom, prenom, groupe)- CU
liste ne contient que des fiches d’étudiants
- Exemples
>>> l_SESI = liste_formation(COURTE_LISTE, 'SESI') >>> len(l_SESI) 6 >>> type(l_SESI[1]) == tuple and len(l_SESI[1]) == 4 True >>> len(liste_formation(L_ETUDIANTS, 'INFO')) 0