08 — Quiz interactif

Niveau requis : 4 (fonctions) + début du 5 (lecture de fichier) / Difficulté : 3/5 / Durée estimée : 2–3 h

Objectif

Un quiz à choix multiples dans le terminal : les questions vivent dans un fichier séparé (pas dans le code), le programme les pose une par une, accepte la réponse, dit juste/faux avec la bonne réponse, et affiche le score final avec un commentaire.

Question 2/5 — Que retourne len("abc") ?
  a) "abc"
  b) 3
  c) 2
Ta reponse : b
Correct !
...
Score : 4/5 — Solide. Une revision sur la question 3 et c'est bon.

Le point clé : séparer les données du code. Ajouter une question ne doit pas demander de toucher au programme.

Notions utilisées

Cahier des charges

Étapes de construction

  1. Code en dur UNE question dans quiz.py (un dict) et écris la boucle d'affichage question/choix + saisie + verdict. Programme complet pour une question. Lance-le.
  2. Extrais ask_question(item, number, total) : elle affiche, valide la saisie, dit juste/faux, retourne un booléen. Appelle-la sur ta question en dur. Même comportement qu'avant = extraction réussie.
  3. Passe à une LISTE de 3 dicts en dur et boucle dessus avec enumerate ; accumule le score avec les retours de ask_question. Affiche X/N.
  4. Crée questions.json avec ces 3 mêmes questions. Écris load_questions(path) avec with open(path, encoding="utf-8") et json.load. Remplace la liste en dur. Le comportement ne change pas — mais maintenant les données vivent hors du code.
  5. Ajoute la validation de saisie en boucle (a/b/c, casse et espaces tolérés : answer.strip().lower()). Teste en tapant Z, B, une ligne vide.
  6. Ajoute les commentaires par palier de score, puis enrichis questions.json à 5+ questions SANS toucher à quiz.py. Si tu dois modifier le code pour ajouter une question, le contrat est cassé — corrige.

Extensions possibles

  1. Mélanger l'ordre des questions à chaque partie (random.shuffle).
  2. Mélanger aussi l'ordre des CHOIX — attention : la bonne lettre change, il faut suivre la bonne réponse à travers le mélange (bon petit casse-tête).
  3. À la fin, reproposer uniquement les questions ratées (les collecter dans une liste pendant la partie).
  4. Plusieurs fichiers de questions (thèmes) et un menu de sélection du thème.

Erreurs fréquentes sur ce projet

Critères de réussite

Commit conseillé

git add projects/mini-projects/08-quiz-interactif/
git commit -m "project: add interactive quiz"

Puis entrée de journal + git push.