06 — Gestionnaire de tâches

Niveau requis : 3 pour la v1, 5 pour la v2 / Difficulté : 3/5 / Durée estimée : 2 h (v1) + 2 h (v2)

Objectif

Une todo-list en ligne de commande : ajouter une tâche, lister les tâches (avec leur état fait / à faire), marquer une tâche comme faite, supprimer une tâche. Menu en boucle jusqu'à q.

1. Ajouter  2. Lister  3. Terminer  4. Supprimer  q. Quitter
> 2
[ ] 1. Acheter du cafe
[x] 2. Finir la lecon 03-2
[ ] 3. Réviser les dicts

Deux versions :

Notions utilisées

Cahier des charges

Commun :

Spécifique v2 :

Étapes de construction

v1 — niveau 3

  1. Pars d'une liste de tâches codée en dur (3 dicts) et écris UNIQUEMENT le listing avec enumerate(tasks, start=1) et l'affichage [x]/[ ]. Lance : l'affichage doit être exactement celui de l'exemple.
  2. Ajoute le menu en boucle while avec le choix 2 (lister) et q (quitter). Les autres choix affichent « pas encore implemente ».
  3. Implémente « Ajouter » : input() du titre, tasks.append({"title": title, "done": False}). Ajoute, liste, vérifie.
  4. Implémente « Terminer » : demande le numéro, convertis en indice (index = number - 1), passe tasks[index]["done"] à True. Vérifie qu'aucune copie n'est nécessaire : tu modifies le dict en place, c'est la mutabilité au travail.
  5. Implémente « Supprimer » avec tasks.pop(index). Ajoute la validation du numéro (les deux commandes en ont besoin : mauvais numéro → message, retour au menu). Vide la liste en dur initiale : le programme est complet. Commit v1.

v2 — niveau 5

  1. Copie en tasks_v2.py. Écris save_tasks(tasks) (ouvre tasks.json en écriture avec with, json.dump) et appelle-la après chaque ajout/terminaison/suppression. Lance, ajoute une tâche, ouvre tasks.json dans VS Code : tes données sont là, lisibles.
  2. Écris load_tasks() : json.load dans un try/except FileNotFoundError qui retourne [] si le fichier n'existe pas. Appelle-la au démarrage.
  3. Test de bout en bout : ajoute deux tâches, quitte, relance, liste — elles sont là. Supprime tasks.json, relance — liste vide, pas d'erreur. Commit v2.

Extensions possibles

  1. Ajouter une date de création à chaque tâche (datetime.date.today(), converti en str pour le JSON).
  2. Filtrer le listing : tout / à faire / terminées.
  3. Ajouter une priorité (1–3) et trier le listing par priorité.
  4. v2 : gérer un fichier JSON corrompu (json.JSONDecodeError) : message, sauvegarde du fichier cassé sous un autre nom, redémarrage à vide — c'est ce que ferait un vrai outil.

Erreurs fréquentes sur ce projet

Critères de réussite

Commit conseillé

git add projects/mini-projects/06-gestionnaire-de-taches/
git commit -m "project: add task manager"
# ... puis, apres la v2 :
git commit -m "project: add task manager with JSON persistence"

Puis entrée de journal + git push. Si tu ne veux pas versionner tes vraies tâches, ajoute tasks.json au .gitignore — décision à noter dans le journal.