Files
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 Permalink 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}"`