Búsqueda de libros y ejecución de préstamos en Python
Clase 12 de 17 • Curso de Python Orientado a Objetos
Resumen
Implementa una búsqueda de libros por título y ejecuta el préstamo con control de errores en Python. Con un módulo Data que centraliza listas de libros y estudiantes, y clases como Biblioteca, Usuario y Estudiante, el flujo valida disponibilidad, muestra mensajes claros y usa excepciones como LibroNoDisponibleError para una experiencia robusta.
¿Cómo preparar Data, Biblioteca y main para la búsqueda?
Para probar con datos realistas, se creó un módulo Data con diez libros y diez estudiantes en listas. Se importan en el archivo principal y se eliminan los elementos previos, manteniendo solo el profesor. Al ejecutar en terminal con python main.py, primero se valida el usuario por cédula y luego se solicitará el título del libro.
¿Cómo se integra Data en main.py?
- Importa listas de libros y estudiantes desde Data.
- Reemplaza los datos locales: deja solo el profesor y borra libros previos.
- Asigna las listas importadas a las variables usadas en main.
- Ejecuta en terminal: python main.py.
¿Qué entradas solicita el sistema?
- Cédula del usuario para identificarlo por “Buscar Usuario”.
- Título del libro con input: "Digite el título del libro".
¿Cómo buscar el libro por título y validar disponibilidad?
Dentro de Biblioteca, se implementa el método buscarolibro que recibe el título, recorre self.libros y retorna el libro si coincide el título y está disponible. Si no lo encuentra, hace un raise de LibroNoDisponibleError con un mensaje claro: "El libro {título} no está disponible o no existe". Consejo: usa la variable del for en minúscula para no confundirla con la clase (L mayúscula).
¿Cómo luce el método buscarolibro?
class Biblioteca:
def buscarolibro(self, titulo):
for libro in self.libros:
if libro.titulo == titulo and libro.disponible:
return libro
raise LibroNoDisponibleError(f"El libro {titulo} no está disponible o no existe")
¿Cómo manejar LibroNoDisponibleError con try y except?
Usa try para lo que puede fallar y captura con except para imprimir el mensaje de la excepción con buena legibilidad.
# Solicitar el título al usuario
titulo = input("Digite el título del libro: ")
# Buscar el libro y manejar errores
try:
libro = biblioteca.buscarolibro(titulo)
print(f"El libro que seleccionaste es {libro.titulo} por {libro.autor}")
except LibroNoDisponibleError as e:
print(f"Error: {e}") # Nota: dos puntos y espacio tras "Error:".
¿Cómo solicitar y prestar el libro con validaciones?
Con el usuario ya identificado y el libro encontrado, el siguiente paso es Solicitar Libro desde la clase Estudiante (hereda de Usuario). Este método recibe el título y retorna el estado de autorización. Luego, se ejecuta el método prestar del libro: verifica disponibilidad, la marca en falso y aumenta el contador de préstamos. Estas operaciones también deben estar en try/except porque pueden disparar LibroNoDisponibleError.
¿Cómo se autoriza y se presta el libro en main?
# Solicitar el libro por parte del usuario
resultado = usuario.solicitar_libro(titulo)
print("\n" + resultado) # Backslash N para separar visualmente.
# Ejecutar el préstamo del libro
try:
resultado_prestar = libro.prestar()
print(resultado_prestar)
except LibroNoDisponibleError as e:
print(f"Error: {e}")
¿Qué mensajes y resultados verás en la terminal?
- “El libro que seleccionaste es … por …”.
- “la metamorfosis está autorizado”.
- “El libro ha sido prestado exitosamente y el total de préstamos es uno”.
¿Qué buenas prácticas se refuerzan?
- Uso de excepciones con mensajes descriptivos: LibroNoDisponibleError.
- Validación de disponibilidad antes de prestar: prestar cambia disponible y cuenta usos.
- Estructuras try y except solo para lo que puede fallar.
- Formatos de salida claros: “Error: mensaje”.
- Pruebas con datos erróneos para detectar faltantes de manejo de errores.
¿Con qué datos erróneos probarías y qué validaciones agregarías tú? Comparte tus ideas y resultados en los comentarios.