Python
Par Mr Yankam Joël Stéphane
EXERCICE : SYSTÈME DE GESTION DE NOTES
Énoncé
Crée un programme qui gère les notes d'étudiants en utilisant des fonctions lambda pour les
calculs statistiques.
Consignes :
1. Crée une liste de dictionnaires contenant nom et notes de chaque étudiant
2. Utilise des fonctions lambda pour :
· Calculer la moyenne de chaque étudiant
· Filtrer les étudiants ayant la moyenne
· Trier les étudiants par moyenne
3. Permets à l'utilisateur de discuter avec le programme
Code à compléter
1 # Liste initiale des étudiants avec leurs notes
2 etudiants = [
3 {"nom": "Alice", "notes": [15, 12, 18, 14]},
4 {"nom": "Bob", "notes": [8, 10, 12, 9]},
5 {"nom": "Charlie", "notes": [19, 17, 16, 18]},
6 {"nom": "Diana", "notes": [10, 11, 9, 12]}
7 ]
9 # TODO: Compléter les fonctions lambda
10 # 1. Lambda pour calculer la moyenne d'une liste de notes
11 calcul_moyenne = lambda notes: # Votre code ici
13 # 2. Ajouter la moyenne à chaque étudiant
14 for etudiant in etudiants:
15 etudiant["moyenne"] = # Votre code ici
17 # 3. Lambda pour vérifier si un étudiant a la moyenne (>=10)
18 a_la_moyenne = lambda etudiant: # Votre code ici
20 # 4. Filtrer les étudiants qui ont la moyenne
21 reussite = list(filter(# Votre code ici))
23 # 5. Trier les étudiants par moyenne (ordre décroissant)
24 classement = sorted(# Votre code ici,
25 key=# Votre code ici,
26 reverse=True)
28 # 6. Système de discussion interactif
29 def discuter():
30 print("=== SYSTÈME DE GESTION DES NOTES ===")
31 print("Commandes disponibles :")
32 print("- 'moyennes' : afficher toutes les moyennes")
33 print("- 'reussite' : afficher les étudiants qui ont la moyenne")
34 print("- 'classement' : afficher le classement")
35 print("- 'aide' : pour un étudiant spécifique")
36 print("- 'quit' : quitter le programme")
37
38 while True:
39 commande = input("\nQue voulez-vous faire ? ").lower()
40
41 if commande == "quit":
42 print("Au revoir !")
43 break
44
45 elif commande == "moyennes":
46 # TODO: Afficher toutes les moyennes
47 pass
48
49 elif commande == "reussite":
50 # TODO: Afficher les étudiants qui ont la moyenne
51 pass
52
53 elif commande == "classement":
54 # TODO: Afficher le classement
55 pass
56
57 elif commande == "aide":
58 # TODO: Demander un nom et afficher ses infos
59 pass
60
61 else:
62 print("Commande non reconnue")
64 # Lancer la discussion
65 discuter()
Questions
Question 1 : Complète la fonction lambda calcul_moyenne pour qu'elle calcule la moyenne
des notes.
Question 2 : Comment ajouter la moyenne à chaque étudiant en utilisant calcul_moyenne ?
Question 3 : Écris la lambda a_la_moyenne qui vérifie si un étudiant a une moyenne >= 10.
Question 4 : Utilise filter() avec la lambda pour obtenir la liste des étudiants qui réussissent.
Question 5 : Utilise sorted() avec une lambda pour trier les étudiants par moyenne
décroissante.
Question 6 : Implémente les différentes commandes du système de discussion.
Solution
1 # Solution complète
3 etudiants = [
4 {"nom": "Alice", "notes": [15, 12, 18, 14]},
5 {"nom": "Bob", "notes": [8, 10, 12, 9]},
6 {"nom": "Charlie", "notes": [19, 17, 16, 18]},
7 {"nom": "Diana", "notes": [10, 11, 9, 12]}
8 ]
10 # Question 1: Lambda pour calculer la moyenne
11 calcul_moyenne = lambda notes: sum(notes) / len(notes) if notes else 0
13 # Question 2: Ajouter la moyenne à chaque étudiant
14 for etudiant in etudiants:
15 etudiant["moyenne"] = calcul_moyenne(etudiant["notes"])
17 # Question 3: Lambda pour vérifier si un étudiant a la moyenne
18 a_la_moyenne = lambda etudiant: etudiant["moyenne"] >= 10
20 # Question 4: Filtrer les étudiants qui ont la moyenne
21 reussite = list(filter(a_la_moyenne, etudiants))
23 # Question 5: Trier les étudiants par moyenne
24 classement = sorted(etudiants,
25 key=lambda e: e["moyenne"],
26 reverse=True)
28 # Question 6: Système de discussion
29 def discuter():
30 print("=== SYSTÈME DE GESTION DES NOTES ===")
31 print("Commandes disponibles :")
32 print("- 'moyennes' : afficher toutes les moyennes")
33 print("- 'reussite' : afficher les étudiants qui ont la moyenne")
34 print("- 'classement' : afficher le classement")
35 print("- 'aide [nom]' : pour un étudiant spécifique")
36 print("- 'quit' : quitter le programme")
37
38 while True:
39 commande = input("\nQue voulez-vous faire ? ").lower().strip()
40
41 if commande == "quit":
42 print("Au revoir !")
43 break
44
45 elif commande == "moyennes":
46 print("\n=== MOYENNES DES ÉTUDIANTS ===")
47 for e in etudiants:
48 print(f"{e['nom']}: {e['moyenne']:.2f}/20")
49
50 elif commande == "reussite":
51 print("\n=== ÉTUDIANTS AYANT LA MOYENNE ===")
52 for e in reussite:
53 print(f"{e['nom']}: {e['moyenne']:.2f}/20")
54
55 elif commande == "classement":
56 print("\n=== CLASSEMENT DES ÉTUDIANTS ===")
57 for i, e in enumerate(classement, 1):
58 print(f"{i}. {e['nom']}: {e['moyenne']:.2f}/20")
59
60 elif [Link]("aide"):
61 # Extraire le nom après "aide"
62 parties = [Link]()
63 if len(parties) > 1:
64 nom = parties[1].capitalize()
65 etudiant_trouve = next((e for e in etudiants if
e["nom"].lower() == [Link]()), None)
66
67 if etudiant_trouve:
68 print(f"\n=== INFORMATIONS POUR {nom} ===")
69 print(f"Notes: {etudiant_trouve['notes']}")
70 print(f"Moyenne: {etudiant_trouve['moyenne']:.2f}/20")
71 print(f"Statut: {'Réussite' if
etudiant_trouve['moyenne'] >= 10 else 'Échec'}")
72 else:
73 print(f"Étudiant '{nom}' non trouvé")
74 else:
75 print("Utilisation: aide [nom]")
76
77 else:
78 print("Commande non reconnue")
80 # Lancer la discussion
81 if __name__ == "__main__":
82 discuter()
Exemple d'exécution
1 === SYSTÈME DE GESTION DES NOTES ===
2 Commandes disponibles :
3 - 'moyennes' : afficher toutes les moyennes
4 - 'reussite' : afficher les étudiants qui ont la moyenne
5 - 'classement' : afficher le classement
6 - 'aide [nom]' : pour un étudiant spécifique
7 - 'quit' : quitter le programme
9 Que voulez-vous faire ? moyennes
11 === MOYENNES DES ÉTUDIANTS ===
12 Alice: 14.75/20
13 Bob: 9.75/20
14 Charlie: 17.50/20
15 Diana: 10.50/20
17 Que voulez-vous faire ? reussite
19 === ÉTUDIANTS AYANT LA MOYENNE ===
20 Alice: 14.75/20
21 Charlie: 17.50/20
22 Diana: 10.50/20
24 Que voulez-vous faire ? classement
26 === CLASSEMENT DES ÉTUDIANTS ===
27 1. Charlie: 17.50/20
28 2. Alice: 14.75/20
29 3. Diana: 10.50/20
30 4. Bob: 9.75/20
32 Que voulez-vous faire ? aide bob
34 === INFORMATIONS POUR Bob ===
35 Notes: [8, 10, 12, 9]
36 Moyenne: 9.75/20
37 Statut: Échec
39 Que voulez-vous faire ? quit
40 Au revoir !
Concepts clés abordés :
· Fonctions lambda : fonctions anonymes pour des opérations simples
· filter() : filtrer une liste selon un critère
· sorted() : trier avec une clé personnalisée
· Interaction utilisateur : boucle de discussion
· Manipulation de dictionnaires : stockage de données structurées