Gestion d’une promotion d’étudiants

25-01-2019

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 le fichier etudiants.py, et en le stockant 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 de ce fichier 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 *

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

Lisez la documentation des fonctions prédéfinies all et any située ici et .

À partir de maintenant, vous pouvez les utiliser …

À faire : Question 0

Définissez une variable COURTE_LISTE de type list formée par les cinq 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 ensemble_des_formations paramétrée par une liste de fiches d’étudiants l et qui renvoie l’ensemble des formations. En voici la spécification

tp_gestion_promo_etudiants.ensemble_des_formations(liste)
Paramètres:liste – (list) une liste de fiches d’étudiants
Renvoie:(set) un ensemble 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:
>>> Liste_demo = [{'nip' : '1174520', 'nom' : 'ERARD', 
...                'prenom' : 'ANNAELLE', 'formation' : 'SESI', 'groupe' : '21'}]
>>> Liste_demo.append({'nip' : '1171680', 'nom' : 'VASSEUR', 
...                    'prenom' : 'AGATHE', 'formation' : 'PEIP', 'groupe' : '12'})
>>> Liste_demo.append({'nip' : '1170249', 'nom' : 'CARDOSO MORENO', 
...                    'prenom' : 'INEIDA', 'formation' : 'MASS', 'groupe' : '2'})
>>> ensemble_des_formations(Liste_demo) == { 'SESI','PEIP','MASS' }
True
>>> ensemble_des_formations(Liste_demo[0:2]) == { 'SESI','PEIP' }
True

À faire : Question 5

Réalisez une fonction nommée nbre_prenoms qui renvoie le nombre d’étudiants dont le prénom est passé en second paramètre dans la liste d’étudiant passée en premier paramètre. En voici la spécification

tp_gestion_promo_etudiants.nbre_prenom(liste, prenom)
Paramètres:
  • liste – (list) une liste de fiches d’étudiants
  • prenom – (str) un prénom
Renvoie:

(int) le nombre d’étudiants ayant le prénom prenom.

CU:

aucune

Exemples:
>>> nbre_prenom(COURTE_LISTE, 'MOHAMED')
1
>>> nbre_prenom(COURTE_LISTE, 'ZENOBE')
0

Combien d’étudiants se prénomment-ils Alexandre ? et Camille ?

À 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

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.

À 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:

aucune

Exemples:
>>> l_SESI = liste_formation(COURTE_LISTE, 'SESI')
>>> len(l_SESI)
2
>>> type(l_SESI[1]) == tuple and len(l_SESI[1]) == 4
True
>>> len(liste_formation(L_ETUDIANTS, 'INFO'))
0