Code optimisé python orienté objets

Loldu32 - Modifié le 9 janv. 2024 à 19:36
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 - 9 janv. 2024 à 20:01

Bonjour,

Je sais pas si mon code est correct, j’ai eu des difficultés voici mon code 

class Bibliotheque:
   def __init__(self, nom, livres_nombre=0):
       if len(nom) == 0:
           raise ValueError("Le nom ne peut pas être une chaîne vide.")
       self.__nom = nom
       self.__livres_nombre = livres_nombre
       self.__livres_empruntes = 0

   @property
   def nom(self):
       return self.__nom

   @nom.setter
   def nom(self, value):
       if len(value) == 0:
           raise ValueError("Le nom ne peut pas être une chaîne vide.")
       self.__nom = value

   @property
   def livres_nombre(self):
       return self.__livres_nombre

   @livres_nombre.setter
   def livres_nombre(self, value):
       if not isinstance(value, int) or value < 0:
           raise ValueError("Le nombre de livres doit être un entier positif.")
       if value < self.__livres_empruntes:
           raise ValueError("Le nombre de livres ne peut pas être inférieur au nombre de livres empruntés.")
       self.__livres_nombre = value

   @property
   def livres_empruntes(self):
       return self.__livres_empruntes

   @livres_empruntes.setter
   def livres_empruntes(self, value):
       if not isinstance(value, int) or value < 0:
           raise ValueError("Le nombre de livres empruntés doit être un entier positif.")
       if value > self.__livres_nombre:
           raise ValueError("Le nombre de livres empruntés ne peut pas être supérieur au nombre de livres disponibles.")
       self.__livres_empruntes = value

   @property
   def livres_disponibles(self):
       return self.__livres_nombre - self.__livres_empruntes

   def emprunter_livre(self, le_quantite):
       if not isinstance(le_quantite, int) or le_quantite < 0:
           raise ValueError("La quantité doit être un entier positif.")
       if le_quantite > self.livres_disponibles:
           raise ValueError("La quantité demandée dépasse le nombre de livres disponibles.")
       self.__livres_empruntes += le_quantite

   def retourner_livre(self, le_quantite):
       if not isinstance(le_quantite, int) or le_quantite < 0:
           raise ValueError("La quantité doit être un entier positif.")
       if le_quantite > self.__livres_empruntes:
           raise ValueError("La quantité retournée dépasse le nombre de livres empruntés.")
       self.__livres_empruntes -= le_quantite

   def __str__(self):
       return f"Nom: {self.__nom}, Livres nombre: {self.__livres_nombre}, Livres disponibles: {self.livres_disponibles}, Livres empruntés: {self.__livres_empruntes}"

Modération : merci d'utiliser les balises de code

A voir également:

2 réponses

mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 7 802
9 janv. 2024 à 20:01

Bonjour,

J'ai remis en forme le code, merci de tenir compte du lien donné par Phil pour tes futurs message.

Le code est correct, mais pour l'instant, il ne fait rien à part déclarer la classe Bibliothèque. Du coup, si tu lances ce fichier, il semble ne rien se passer. Il faut donc créer une (ou plusieurs) instance(s) de cette classe et que tu l'utilises.

Voici un exemple :

class Bibliotheque:
   def __init__(self, nom, livres_nombre=0):
       if len(nom) == 0:
           raise ValueError("Le nom ne peut pas être une chaîne vide.")
       self.__nom = nom
       self.__livres_nombre = livres_nombre
       self.__livres_empruntes = 0

   # etc...


def main()
   bibliotheque = Bibliotheque("Bibliothèque d'Alexandrie", 100000)
   print(bibliotheque)
   bibliotheque.emprunter_livre(10)
   print(bibliotheque)


main()

Résultat :

Nom: Bibliothèque d'Alexandrie, Livres nombre: 100000, Livres disponibles: 100000, Livres empruntés: 0
Nom: Bibliothèque d'Alexandrie, Livres nombre: 100000, Livres disponibles: 99990, Livres empruntés: 10

Bonne chance

1
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
9 janv. 2024 à 13:25

Bonjour,

Qu'as tu eu comme difficultés ?

Des erreurs ?

on y verrait plus clair si tu affichais ton code avec les balises de code
mode d'emploi:

https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Visuellement, ça doit ressembler à ça:

for k in range(10):
    print(k)
0