PaliSkill
Python avancé

Leçon 10 / 10 — Chapitre 9: Mise en pratique : gestionnaire de tâches

Cas pratique : un script complet en ligne de commande

Cette dernière leçon assemble toutes les briques du chapitre en un script complet, piloté depuis la ligne de commande avec argparse (vu au huitième chapitre).

import argparse
import json
from dataclasses import dataclass, asdict

@dataclass
class Tache:
    titre: str
    priorite: int = 2
    terminee: bool = False

class GestionnaireTaches:
    def __init__(self):
        self.taches = []

    def ajouter(self, titre, priorite=2):
        self.taches.append(Tache(titre, priorite))

    def marquer_terminee(self, titre):
        for t in self.taches:
            if t.titre == titre:
                t.terminee = True
                return
        raise KeyError(titre)

    def sauvegarder(self, chemin="taches.json"):
        with open(chemin, "w") as fichier:
            json.dump([asdict(t) for t in self.taches], fichier)

    def charger(self, chemin="taches.json"):
        try:
            with open(chemin) as fichier:
                self.taches = [Tache(**d) for d in json.load(fichier)]
        except FileNotFoundError:
            self.taches = []

    def lister(self):
        for t in sorted(self.taches, key=lambda t: t.priorite):
            statut = "fait" if t.terminee else "a faire"
            print(f"[{statut}] {t.titre} (priorite {t.priorite})")

if __name__ == "__main__":
    analyseur = argparse.ArgumentParser()
    analyseur.add_argument("action", choices=["ajouter", "terminer", "lister"])
    analyseur.add_argument("titre", nargs="?")
    analyseur.add_argument("--priorite", type=int, default=2)
    arguments = analyseur.parse_args()

    g = GestionnaireTaches()
    g.charger()

    if arguments.action == "ajouter":
        g.ajouter(arguments.titre, arguments.priorite)
    elif arguments.action == "terminer":
        g.marquer_terminee(arguments.titre)
    elif arguments.action == "lister":
        g.lister()

    g.sauvegarder()

Ce que fait chaque partie :

  • choices=["ajouter", "terminer", "lister"] (une option d'argparse non encore vue) limite action à ces trois valeurs précises, refusant automatiquement toute autre saisie.
  • nargs="?" rend titre optionnel (nécessaire pour l'action "lister", qui n'a besoin d'aucun titre).
  • g.charger() puis g.sauvegarder() (vus dans ce chapitre) entourent chaque exécution, pour que les modifications persistent d'un lancement à l'autre.

Lancé avec python taches.py ajouter "Ecrire le rapport" --priorite 1, ce script ajoute la tâche et la sauvegarde ; relancé avec python taches.py lister, il affiche l'état à jour, incluant cette tâche.

À vous de jouer : ajoutez une quatrième action "supprimer" à choices, avec la logique correspondante dans le bloc if/elif.

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que la certification finale.

2 500 XOF / 3,81 € / 4,15 $

Débloquez les 87 leçons restantes de ce module

Votre paiement est vérifié avant l'activation de l'accès