Vous êtes sur la page 1sur 6

UNIVERSITE NORD-AMERICAINE PRIVEE

INSTITUT INTERNATIONAL DE TECHNOLOGIE


DEPARTEMENT INFORMATIQUE


© Examen session principale AU : 2021-2022
Matière Programmation Python Semestre : 1
Réservé à l’administration
Discipline 1ère année Génie Informatique
Enseignants Dr. Taoufik Ben Abdallah / Dr. Rania Rebaï Boukhriss
Documents autorisés Nombre de pages : 𝟔 Durée : 𝟐𝐇

Prénom & Nom : ______________________________________________________________________________________

Commentaires & Note /20 Signature du l’enseignant Réservé à l’administration


Partie I / 8pts

NB.
⎯ Les étudiants doivent répondre sur la feuille d’énoncé
⎯ Le barème est donné à titre indicatif, et il est susceptible d’être modifié

Étape à suivre :
a. Télécharger le fichier "examen_pp_2022.zip" à partir de Moodle (section Examen 2022), puis extraire les fichiers
dedans : "examen_pp.ipynb", "résidents.csv" et "session.txt".
b. Ouvrir Jupyter notebook et télécharger (upload) le fichier "examen_pp.ipynb", puis cliquer sur "Téléverser".
NB. Ce fichier sera utilisé juste pour vérifier les réponses. Toute réponse doit être rédigée dans la partie
qui lui est réservée sur la feuille de l’énoncé

Problème :
Le club IIT PYTHON TUNISIA a organisé un événement captivant visant la participation des étudiants qui ont eu
l’occasion de participer à des formations et des workshops instructifs. Ce séjour a été animé par diverses activités de
Team building et des soirées conviviales. On désire écrire un programme Python qui gère les participants à partir de deux
fichiers résidents.csv et session.txt.
Un résident est caractérisé par son Prénom&Nom, son statut (enseignant ou étudiant), son fonction (participant ou
organisateur), son numéro de chambre et les numéros de sessions assistés séparés par des "/" (exemple : 1/2/4/6). Ces
informations sont mentionnées dans le fichier résidents.csv où chaque ligne représente un résident dont ses caractéristiques
sont séparées par ";" (Figure 1).
Le fichier session.txt énumère les différentes sessions programmées dans cet évènement. En effet, chaque ligne représente
le numéro de la session et sa désignation séparée par une tabulation (Figure 2).
résidents.csv sessions.txt

Figure 1 : résidents.csv Figure 2 : sessions.txt


Chaque chambre est caractérisée par son numéro et son type ("single", "double" ou "triple"). Ces caractéristiques
sont présentées dans le dictionnaire 𝒄𝒉𝒂𝒎𝒃𝒓𝒆𝒔 et la liste 𝒕𝒚𝒑𝒆_𝒄𝒉𝒂𝒎𝒃𝒓𝒆.

1/6
Ne Rien Ecrire ici

Chambres = {"1001":"double", "1013": "single", "1014": "triple", "1015": "triple",


"1017": "triple", "2029": "single", "2030": "double", "2033": "triple",
"3011": "triple", "3016": "double", "3019": "double", "3020": "double"}
type_chambre=["single", "double", "triple"]

On peut se baser sur le programme principal suivant pour appeler les fonctions à développer
ajouter_resident(**{"résident": "Imed Dammak", "statut": "étudiant",
"fonction": "organisateur", "chambre": "1017", "sessions": "1/2/3/4/6"})
g1=gen_resident(); print(next(g1))
g2=selectionner_resident('étudiant', 'participant') ; print(next(g2))
g3=gen_session(); print(next(g3))
print(chercher_session(3,4))
print(sessions_resident("Moetaz Halouani"))
print(nombre_chambre())
try:
t,r=residents_chambre('1001')
print(t,r)
except AssertionError: print("chambre n'existe pas ou non habitable")
print(f("étudiant", "organisateur"))

Travail à faire :
1. Écrire une fonction 𝒂𝒋𝒐𝒖𝒕𝒆𝒓_𝒓𝒆𝒔𝒊𝒅𝒆𝒏𝒕(∗∗ 𝒓) qui ajoute le résident 𝒓 à la dernière ligne de residents.csv (utiliser
DictWriter()) [2 pts]

____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________

2. Étant donnée le générateur 𝒈𝒆𝒏_𝒓𝒆𝒔𝒊𝒅𝒆𝒏𝒕() qui renvoie un tuple de format ('resident', 'statut','fonction',
'numéro de chambre', [liste comportant les numéros des sessions dont le résident y participe])
pour chaque résident de fichier residents.csv
a. Ajouter les instructions nécessaires pour la lecture du fichier residents.txt sachant que la première ligne ne sera pas
incluse [0.75 pt]
def gen_resident():
with open(chemin1, 'r+') as f:
__________________________________________________________________________________
data= ____________________________________________________________________________

yield from [tuple(el[:-1]+[[int(i) for i in el[-1].split("/")]]) for el in data]

2/6
b. Compléter le vide correspondant au générateur 𝒔𝒆𝒍𝒆𝒄𝒕𝒊𝒐𝒏𝒏𝒆𝒓_𝒓𝒆𝒔𝒊𝒅𝒆𝒏𝒕() qui renvoie un tuple de format
('resident', 'statut', 'fonction', 'numéro de chambre', [liste comportant les numéros des
sessions dont le résident y participe]) pour chaque résident de fichier résidents.txt selon son statut (étudiant
ou enseignant) et sa fonction (organisateur ou participant) (utiliser 𝒈𝒆𝒏_𝒓𝒆𝒔𝒊𝒅𝒆𝒏𝒕()) [1.25 pts]
### Exemple d’exécution ###
#Entrée : print(next(selectionner_resident('étudiant', 'participant')))
#Sortie : ('Moetaz Halouani', 'étudiant', 'participant', '1014', [1, 4, 6])

def selectionner_resident(statut, fonction):


f= lambda x,y: x==statut and y==fonction
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________

3. Écrire un générateur 𝒈𝒆𝒏_𝒔𝒆𝒔𝒔𝒊𝒐𝒏() qui renvoie la désignation de chaque session sous forme d’un dictionnaire
{clé: valeur} correspondant à la base des sessions du fichier sessions.txt. La clé représente le numéro de la session
et la valeur correspond à sa désignation [2.5 pts]
### Exemple d’exécution ###
#Entrée : print(next(gen_session()))
#Sortie : {1: 'Cérémonie d’ouverture'}

____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________

4. Écrire une fonction 𝒄𝒉𝒆𝒓𝒄𝒉𝒆𝒓_𝒔𝒆𝒔𝒔𝒊𝒐𝒏(∗ 𝒏𝒖𝒎_𝒔) qui retourne un dictionnaire représentant les désignations des
numéros de sessions 𝒏𝒖𝒎_𝒔. Les clés correspondent aux numéros de sessions et les valeurs représentent ses
désignations. Cette fonction retourne un dictionnaire vide si aucun numéro de 𝒏𝒖𝒎_𝒔 existe dans sessions.txt (utiliser
le générateur 𝒈𝒆𝒏_𝒔𝒆𝒔𝒔𝒊𝒐𝒏()) [2.5 pts]
### Exemple d’exécution ###
#Entrée : chercher_session(3,4)
#Sortie : {3: 'Formation ML&DL', 4: 'Soirée culturelle'}

____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________

3/6
5. Écrire une fonction 𝒔𝒆𝒔𝒔𝒊𝒐𝒏𝒔_𝒓𝒆𝒔𝒊𝒅𝒆𝒏𝒕(𝒓) qui affiche la liste des désignations des sessions dans lesquelles le
résident 𝒓 y participe (utiliser 𝒈𝒆𝒏_𝒓𝒆𝒔𝒊𝒅𝒆𝒏𝒕() et 𝒄𝒉𝒆𝒓𝒄𝒉𝒆𝒓_𝒔𝒆𝒔𝒔𝒊𝒐𝒏(∗ 𝒏𝒖𝒎_𝒔)) [2.5 pts]
### Exemple d’exécution ###
#Entrée : print(sessions_resident("Moetaz Halouani"))
#Sortie : ['Cérémonie d’ouverture', 'Soirée culturelle', 'Cérémonie de clôture']

____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________

6. Écrire une fonction 𝒏𝒐𝒎𝒃𝒓𝒆_𝒄𝒉𝒂𝒎𝒃𝒓𝒆𝒔() qui retourne le nombre de chambre par type sous forme d’un
dictionnaire comme suit {"single": nombre de chambres single, "double": nombre de chambres double,
"triple": nombre de chambres triple}. NB. Utiliser 𝒈𝒆𝒏_𝒓𝒆𝒔𝒊𝒅𝒆𝒏𝒕() et l’intermédiaire d’un ensemble pour
extraire tous les chambres résidées sans duplication [2.5 pts]
### Exemple d’exécution ###
#Entrée : print(nombre_chambre())
#Sortie : {'single': 1, 'double': 1, 'triple': 3}

____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________

4/6
7. Écrire une fonction 𝒓𝒆𝒔𝒊𝒅𝒆𝒏𝒕𝒔_𝒄𝒉𝒂𝒎𝒃𝒓𝒆(𝒏𝒖𝒎_𝒄) qui retourne le type de chambre 𝒏𝒖𝒎_𝒄 et une liste de
résidents qui résident cette chambre. Cette fonction lève une exception de type AssertionError si 𝒏𝒖𝒎_𝒄 n’existe
pas dans 𝒄𝒉𝒂𝒎𝒃𝒓𝒆𝒔 ou elle est non habitable [3.5 pts]
### Exemple d’exécution ###
#Entrée :
try:
t,r=residents_chambre('1001')
print(t,r)
except AssertionError:
print("chambre n'existe pas ou non habitable")
#Sortie : double ['Aymen Degachi', 'Taoufik Ben Abdallah']

____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________

8. Écrire une fonction anonyme qui retourne une chaine de caractère comportant les "prénom nom" des résidents ayant
comme statut 𝒔𝒕𝒂𝒕𝒖𝒕 et comme fonction 𝒇𝒐𝒏𝒄𝒕𝒊𝒐𝒏. Les "prénom nom" des résidents doivent être séparés par "/" [2.5 pts]
NB.
• Affecter la définition de cette fonction à une variable nommée f
• Traiter cette fonction sans faire recours à une structure itérative
### Exemple d’exécution ###
#Entrée : f("étudiant", "organisateur")
#Sortie : 'Yassine Affes/Aymen Kallel/Ayoub Dammak/Imed Dammak'

____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________

5/6
9. Question Optionnelle
Écrire une fonction 𝒗𝒆𝒓𝒊𝒇𝒊𝒆𝒓(𝒏𝒖𝒎_𝒄) qui vérifie le type de chambre par rapport aux nombres de résidents qu’elle y
réside. Cette fonction lève une exception de type valueError si le nombre de résident n’est pas conforme au type de
la chambre (chambre single= 1 résident, chambre double= 2 résidents, chambre triple= 3 résidents) [2 pts]
### Exemple d’exécution ###
#Entrée :
try:
print(verifier('1001'))
except ValueError as e:
print(e)
except AssertionError:
print("chambre n'existe pas ou non habitable")
#Sortie : True

____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________

Bon Travail

6/6

Vous aimerez peut-être aussi