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.