Prépa Python

Basique — chapitre 19 sur 54

TP récapitulatif — Analyse des notes d'une classe

Projet intégrant toutes les notions du niveau Basique

60 min1 évaluation

Ce Travail Pratique mobilise toutes les notions du niveau Basique : variables, types, opérateurs, conditions, boucles, listes, tuples, dictionnaires, ensembles, fonctions natives.

Contexte

Un professeur vous demande de l'aider à analyser les notes de sa classe. Voici les données :

python
notes = {
    "Alice":   14,
    "Bob":     12,
    "Charlie": 17,
    "Diana":   9,
    "Eve":     15,
    "Frank":   11,
    "Grace":   8,
    "Hugo":    13,
    "Iris":    18,
    "Julien":  10,
}

Vous allez écrire progressivement un programme qui répond aux demandes ci-dessous. Chaque partie est indépendante — si vous bloquez sur une, passez à la suivante.


TP récapitulatif — Analyse des notes d'une classe

0 / 6 étapes validées

Étape 1

Partie 1 — Statistiques générales

Questions

  1. Calculer dans moyenne la note moyenne de la classe, et l'afficher arrondie à 2 décimales.
  2. Ranger la note la plus haute dans note_max et la note la plus basse dans note_min, et les afficher.
  3. Ranger dans meilleur le prénom de l'élève ayant obtenu la meilleure note, et dans moins_bon celui de l'élève ayant la plus basse, et les afficher. Les notes de la classe sont toutes différentes : il n'y a pas d'ex æquo.
  4. Calculer dans ecart l'écart entre la meilleure et la moins bonne note, et l'afficher.
Étape 2

Partie 2 — Analyse par mentions

On définit les mentions suivantes :

Note Mention
< 10 Insuffisant
10 ≤ note < 12 Passable
12 ≤ note < 14 Assez bien
14 ≤ note < 16 Bien
≥ 16 Très bien

Questions

  1. Parcourir le dictionnaire et afficher pour chaque élève une ligne de la forme : Alice a obtenu 14 (Bien).
  2. Compter dans le dictionnaire compteur combien d'élèves ont chaque mention. Ses cinq clés sont les cinq mentions, déjà présentes à 0 dans le code de départ.
  3. Ranger dans admis le nombre d'élèves ayant la moyenne (note ≥ 10), et dans taux_reussite le pourcentage de réussite (admis rapporté au nombre d'élèves, multiplié par 100, sans l'arrondir : 80.0 pour 8 admis sur 10). Afficher ces deux résultats.
Étape 3

Partie 3 — Doublons et ensembles

Questions

  1. Construire l'ensemble (set) notes_distinctes des notes obtenues, sans doublons, et ranger dans nb_distinctes le nombre de notes distinctes.
  2. Construire l'ensemble uniques des notes qui n'ont été obtenues qu'une seule fois.

Sur les données de la classe, toutes les notes sont différentes : les deux ensembles sont égaux. La correction rejoue votre programme sur des classes où certaines notes se répètent.

Étape 4

Partie 4 — Tirage aléatoire (bonus)

Question

  1. Utiliser le module random pour tirer au hasard le prénom d'un élève qui passera au tableau, rangé dans prenom_au_hasard. Afficher son prénom et sa note, sous la forme Iris (18) — éventuellement précédée d'un libellé : Au tableau : Iris (18).

Indice : random.choice(sequence) renvoie un élément pris au hasard dans une séquence, par exemple random.choice(["pile", "face"]). Un dictionnaire n'en est pas une : list(notes) donne la liste de ses clés.

Étape 5

Partie 5 — Interaction utilisateur

Questions

  1. Demander un prénom à l'utilisateur et afficher sa note et sa mention (barème de la partie 2), sous la forme Charlie a obtenu 17 (Très bien). Si le prénom n'existe pas, afficher Prénom 'Zoe' non trouvé dans la classe., puis passer à la question 2 sans redemander de prénom.
  2. Demander ensuite une note seuil (entier) et afficher les élèves ayant une note ≥ au seuil, un par ligne et dans l'ordre du dictionnaire, sous la forme - Iris (18).

En dehors des invites de saisie, dont le texte est libre, le programme n'affiche rien d'autre que ces lignes. Avec les saisies Bob puis 16, par exemple :

text
Bob a obtenu 12 (Assez bien)
- Charlie (17)
- Iris (18)
Étape 6

Partie 6 — Classement et présentation

Questions

  1. Ranger dans classement la liste de tuples (prénom, note), du meilleur au moins bon, puis afficher le classement complet de la classe (du meilleur au moins bon) avec enumerate pour numéroter :

    text
    1. Iris : 18
    2. Charlie : 17
    3. Eve : 15
    ...

    Indice : trier les items du dictionnaire par note décroissante avec :

    python
    sorted(notes.items(), key=lambda t: t[1], reverse=True)

    (Vous avez rencontré cette forme key=lambda … avec les fonctions natives ; les lambda ont leur propre chapitre en Partie 3.)

  2. Construire dans chaine_noms la chaîne "Iris, Charlie, Eve, ..." (prénoms du classement séparés par une virgule et une espace). Indice : utilisez .join().

  3. Pour chaque élève, dans l'ordre du dictionnaire notes, construire dans la liste badges un « badge » au format [ALICE-14] en mettant le prénom en majuscules (utilisez .upper()). Afficher tous les badges sur une seule ligne.

🏆 Bonus — Pour aller plus loin

Une fois les 6 parties maîtrisées, trois défis supplémentaires. Ils sont facultatifs : ils ne comptent pas dans votre progression.

exercice 01.99.x1bonusà faire

Histogramme. Affichez un diagramme en barres des notes : une ligne par élève, dans l'ordre du dictionnaire notes. Chaque ligne contient, dans cet ordre :

  • le prénom, complété par des espaces jusqu'à la longueur du plus long prénom ;
  • | (une barre verticale entre deux espaces) ;
  • une étoile * par point de note ;
  • un espace, puis la note entre parenthèses.

Les trois premières lignes donnent :

text
Alice   | ************** (14)
Bob     | ************ (12)
Charlie | ***************** (17)

La longueur du plus long prénom se calcule : la vérification rejoue votre programme avec d'autres élèves.

exercice 01.99.x2bonusà faire

Ex æquo. Construisez le dictionnaire ex_aequo : pour chaque note obtenue par au moins deux élèves, la liste de leurs prénoms, dans l'ordre du dictionnaire notes. Une note obtenue par un seul élève n'y figure pas. Affichez-le.

Avec la classe de l'énoncé, toutes les notes sont distinctes : ex_aequo est vide. Créez un doublon pour tester — la vérification rejoue votre programme avec d'autres classes.

exercice 01.99.x3bonusà faire

Note la plus fréquente. Quelle note revient le plus souvent dans la classe ? Rangez :

  • dans frequence, le nombre de fois où elle apparaît ;
  • dans plus_frequentes, la liste des notes qui apparaissent ce nombre de fois — il peut y en avoir plusieurs —, triée par ordre croissant.

Affichez-les. Avec la classe de l'énoncé, toutes les notes sont distinctes : chacune apparaît une fois. La vérification rejoue votre programme avec d'autres classes.


✅ Validation du niveau Basique