118 lines
3.0 KiB
Python
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}")
|