Files
training.python.beginner/training/exercices/extra-initiation/library.md
Steve Kossouho bea28eca14 Convert Asciidoc to markdown
Converted asciidoc to markdown using ai.
2025-07-06 22:07:31 +02:00

3.4 KiB

Atelier sur la première partie

L'atelier suivant vous fait construire une structure où vous pouvez :

  • créer des bibliothèques
  • créer des livres
  • créer des utilisateurs

Et avec ces objets, vous pouvez :

  • ajouter des livres à vos bibliothèques
  • emprunter et rendre des livres
  • voir les informations sur les emprunts
  • voir les informations sur les livres présents dans une bibliothèque
  • etc.

L'exercice, qui peut vous prendre un peu de temps, vous permet de :

  • manipuler des objets, listes, dictionnaires
  • utiliser des f-strings pour afficher des informations en console
  • utiliser des méthodes et même découvrir la méthode __str__ (faites une recherche Google)
  • structurer un peu votre code (concept limité par la taille de l'exercice)

Organisation

  • un package entities contenant
    • un module library pour y mettre la classe Library
    • un module book pour y mettre la classe Book
    • un module user pour y mettre la classe User
  • un module application vous servant de point d'entrée

L'organisation est simple, ceci dû à la taille du projet. Des projets grandissants impliquent souvent des réorganisations.

Des bibliothèques

  1. Créez une classe Library
    • Avec des attributs
      • name (None)
      • is_open (True)
      • books (None)
    • Avec des méthodes
      • __init__(self, name=None, is_open=True) qui initialise les attributs du nouvel objet.
      • open(self, value=True) pour changer l'état d'ouverture :
        • Ne fait rien si value a déjà la même valeur que self.is_open
      • register_book(self, book) qui ajoute un livre à l'attribut .books (le transforme d'abord en liste s'il est à None, puis ajoute le livre)
      • show_books() qui affiche la liste des livres enregistrés
      • __str__(self) qui renvoie le texte affiché si on fait print() sur l'objet
      • get_book_avg_prices() qui renvoie le prix moyen des livres de la bibliothèque

Des livres

  1. Créez une classe Book
    • Avec des attributs
      • title (None)
      • author (None)
      • is_borrowed (False) : le livre est-il emprunté
      • borrower (None) : personne qui a emprunté
      • history (None) : liste des opérations d'emprunt du livre
      • price (0) : prix de base
    • Avec des méthodes
      • __init__(self, ...) pour initialiser les attributs title, price et author
      • borrow(self, user) qui marque le livre comme emprunté, et modifie borrower :
        • Ne fait rien si le livre est déjà marqué emprunté, sinon :
          • is_borrowed devient True
          • borrower prend la référence de l'objet de la classe User
          • history devient une liste à laquelle on ajoute le dictionnaire {"user": user, "when": datetime.now()}
      • return_borrow(self) qui marque le livre comme rendu (non emprunté)
        • Ne fait rien si le livre est déjà marqué comme non emprunté, sinon :
          • borrower prend la valeur None
      • show_history(self) qui affiche l'historique formaté des emprunts
      • show_status(self) qui affiche le statut du livre : titre, emprunté etc.

Des utilisateurs

  1. Créez une classe User
    • Avec des attributs
      • name (None)
    • Avec des méthodes
      • __init__(self, name=None) qui initialise l'attribut de l'objet
      • __str__ (self) qui renvoie une chaîne f"Utilisateur : {self.name}"