"""Exemple de script Python illustrant l'usage des dataclasses.""" from dataclasses import dataclass, field from datetime import datetime, timedelta from typing import Iterable @dataclass class Task: """Représente une tâche planifiée avec une durée estimée.""" name: str estimated_minutes: int created_at: datetime = field(default_factory=datetime.now) completed: bool = False def remaining_minutes(self) -> int: """Calcule le temps restant estimé.""" return 0 if self.completed else self.estimated_minutes def mark_done(self) -> None: """Marque la tâche comme terminée.""" self.completed = True def summarize(tasks: Iterable[Task]) -> str: """Retourne un résumé textuel de la charge de travail.""" task_list = list(tasks) total = sum(task.estimated_minutes for task in task_list) remaining = sum(task.remaining_minutes() for task in task_list) done = total - remaining return ( f"Tâches: {len(task_list)}\n" f"Terminé: {done} min\n" f"Restant: {remaining} min\n" f"Charge totale: {total} min" ) def main() -> None: """Point d'entrée du script avec quelques exemples.""" tasks = [ Task("Préparer la réunion", estimated_minutes=45), Task("Répondre aux emails", estimated_minutes=20), Task("Prototyper l'interface", estimated_minutes=90), ] # Marquer une tâche comme terminée pour illustrer la logique. tasks[1].mark_done() print("Résumé du jour:") print(summarize(tasks)) # Afficher l'échéance approximative si toutes les tâches sont démarrées maintenant. deadline = datetime.now() + timedelta(minutes=sum(task.remaining_minutes() for task in tasks)) print(f"Heure de fin estimée: {deadline:%H:%M}") if __name__ == "__main__": main()