Curso-lenguaje-python/python-ofensivo/03_proyecto_biblioteca/exercise.py

118 lines
3.0 KiB
Python

#!/usr/bin/env python3
"""
Proyecto: Biblioteca
Objetivos:
- Crear una clase Libro que permita almacenar la información de un libro.
- Lógica para prestar y devolver un libro.
- Clase biblioteca infantil que herede de biblioteca y permita almacenar libros para niños.
"""
class Libro:
def __init__(self, id, autor, titulo):
self.id = id
self.autor = autor
self.titulo = titulo
self.esta_prestado = False
def __str__(self):
return f"Libro({self.id}, {self.titulo}, {self.autor})"
def __repr__(self):
return self.__str__()
class Biblioteca:
def __init__(self):
self.libros = {} # {id: Libro(id, autor, titulo)}
def agregar_libro(self, libro):
if libro.id not in self.libros:
self.libros[libro.id] = libro
else:
print(f"\n[!] No es posible agregar el libro con ID {libro.id}")
def prestar_libro(self, id):
if id in self.libros and not self.libros[id].esta_prestado:
self.libros[id].esta_prestado = True
print(f"\n[+] Se prestó el libro con ID {id}")
else:
print(f"\n[!] No es posible prestar el libro con ID {id}")
@property
def mostrar_libros(self):
return [libro for libro in self.libros.values() if not libro.esta_prestado]
@property
def mostrar_libros_prestados(self):
return [libro for libro in self.libros.values() if libro.esta_prestado]
class BibliotecaInfantil(Biblioteca):
def __init__(self):
super().__init__()
self.libros_para_ninos = {}
def agregar_libro(self, libro, infantil):
super().agregar_libro(libro)
self.libros_para_ninos[libro.id] = infantil
def prestar_libro(self, id, es_nino):
if id in self.libros and not self.libros[id].esta_prestado and self.libros_para_ninos[id] == es_nino:
self.libros[id].esta_prestado = True
print(f"\n[+] Se prestó el libro con ID {id}")
else:
print(f"\n[!] No es posible prestar el libro con ID {id}")
@property
def mostrar_libros_infantiles(self):
return [libro for libro in self.libros.values() if self.libros_para_ninos[libro.id]]
if __name__ == '__main__':
biblioteca = BibliotecaInfantil()
libro1 = Libro(1, "Antoine de Saint-Exupéry", "El Principito")
libro2 = Libro(2, "Mario Vargas Llosa", "La ciudad y los perros")
libro3 = Libro(3, "Gabriel García Márquez", "Cien años de soledad")
biblioteca.agregar_libro(libro1, infantil=True)
biblioteca.agregar_libro(libro2, infantil=False)
biblioteca.agregar_libro(libro3, infantil=False)
print(f"\n[+] Libros en la biblioteca: {biblioteca.mostrar_libros}")
biblioteca.prestar_libro(1, es_nino=True)
biblioteca.prestar_libro(2, es_nino=False)
print(f"\n[+] Libros en la biblioteca: {biblioteca.mostrar_libros}")
print(f"\n[+] Libros prestados: {biblioteca.mostrar_libros_prestados}")
print(f"\n[+] Libros infatiles: {biblioteca.mostrar_libros_infantiles}")