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

80 lines
3.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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}"`