UNIVERSITE IBN TOFAIL
Faculté des Sciences – Kenitra
Département Informatique IA
Année Universitaire 2025/ 2026
Tp1 : Fonctions Avancées, Fichiers &
POO
EXERCICE 1 : Statistiques avec *args
Créez une fonction analyser_notes() qui accepte un nombre variable de notes et retourne un
dictionnaire contenant :
• "min" : la note la plus basse
• "max" : la note la plus haute
• "moyenne" : la moyenne arrondie à 2 décimales
• "mention" : "Excellent" si moyenne ≥ 16, "Bien" si ≥ 14, "Assez bien" si ≥ 12, "Passable" si
≥ 10, "Insuffisant" sinon
Si aucune note n'est fournie, retournez None.
Exemples d'appels attendus :
print(analyser_notes(14, 16, 18, 12)) -->
{'min': 12, 'max': 18, 'moyenne': 15.0, 'mention': 'Bien'}
EXERCICE 1
def analyser_notes(*notes):
if not notes:
return None
moy = round(sum(notes) / len(notes), 2)
if moy >= 16: mention = "Excellent"
elif moy >= 14: mention = "Bien"
elif moy >= 12: mention = "Assez bien"
elif moy >= 10: mention = "Passable"
else: mention = "Insuffisant"
return {"min": min(notes), "max": max(notes), "moyenne": moy, "mention": mention}
print(analyser_notes(14, 16, 18, 12))
EXERCICE 2 :
Créez une fonction creer_fiche() qui reçoit uniquement des paramètres nommés (**kwargs) et
affiche une fiche formatée. La fiche doit :
• Afficher chaque clé/valeur reçue
• Afficher un message d'avertissement si l'une des clés "nom" ou "age" est absente
• Toujours afficher "Statut : Étudiant actif" à la fin, quelle que soit l'entrée
Exemples d'appels attendus :
Professeur Ayoub AMRANI
UNIVERSITE IBN TOFAIL
Faculté des Sciences – Kenitra
Département Informatique IA
Année Universitaire 2025/ 2026
creer_fiche(nom="Ahmed", age=20, filiere="Informatique", ville="Kenitra")
# ──────────────────────────
# Fiche étudiant :
# nom : Ahmed
# age : 20
# filiere : Informatique
# ville : Kenitra
# Statut : Étudiant actif
def creer_fiche(**kwargs):
print("─" * 26)
print("Fiche étudiant :")
for cle, val in [Link]():
print(f" {cle:<8} : {val}")
if "nom" not in kwargs:
print("Avertissement : 'nom' absent!")
if "age" not in kwargs:
print("Avertissement : 'age' absent!")
print(" Statut : Étudiant actif")
creer_fiche(nom="Ahmed", age=20, filiere="Informatique", ville="Kenitra")
EXERCICE 3 : Lambda et filtrage
Vous disposez d'une liste de dictionnaires représentant des étudiants :
etudiants = [
{"nom": "Ali", "note1": 12, "note2": 9, "note3": 14, "groupe": "A"},
{"nom": "Sara", "note1": 18, "note2": 17, "note3": 16, "groupe": "B"},
{"nom": "Karim", "note1": 8, "note2": 10, "note3": 7, "groupe": "A"},
{"nom": "Lina", "note1": 15, "note2": 14, "note3": 13, "groupe": "B"},
{"nom": "Ahmed", "note1": 11, "note2": 10, "note3": 12, "groupe": "A"},
]
En utilisant lambda et les fonctions sorted(), filter():
1. Triez les étudiants par moyenne décroissante
2. Filtrez uniquement ceux du groupe "A" avec une moyenne ≥ 10
EXERCICE 3
etudiants = [
{"nom": "Ali", "note1": 12, "note2": 9, "note3": 14, "groupe": "A"},
{"nom": "Sara", "note1": 18, "note2": 17, "note3": 16, "groupe": "B"},
{"nom": "Karim", "note1": 8, "note2": 10, "note3": 7, "groupe": "A"},
Professeur Ayoub AMRANI
UNIVERSITE IBN TOFAIL
Faculté des Sciences – Kenitra
Département Informatique IA
Année Universitaire 2025/ 2026
{"nom": "Lina", "note1": 15, "note2": 14, "note3": 13, "groupe": "B"},
{"nom": "Ahmed", "note1": 11, "note2": 10, "note3": 12, "groupe": "A"},
]
moy = lambda e: (e["note1"] + e["note2"] + e["note3"]) / 3
# 1. Triés par moyenne décroissante
tries = sorted(etudiants, key=moy, reverse=True)
print([e["nom"] for e in tries])
# 2. Groupe A avec moyenne >= 10
filtres = list(filter(lambda e: e["groupe"] == "A" and moy(e) >= 10, etudiants))
print([e["nom"] for e in filtres])
Professeur Ayoub AMRANI