Update Python Ofensivo
This commit is contained in:
parent
7c2ccb390c
commit
661b027ccc
117
python-ofensivo/03_proyecto_biblioteca/exercise.py
Normal file
117
python-ofensivo/03_proyecto_biblioteca/exercise.py
Normal file
@ -0,0 +1,117 @@
|
||||
#!/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}")
|
Loading…
Reference in New Issue
Block a user