Menu
Coddy logo textTech

Funcionalidad de búsqueda

Parte de la sección Object Oriented Programming del Journey de Python de Coddy. Lección 58 de 64.

challenge icon

Desafío

Intermedio

En este desafío, implementarás un sistema de gestión de biblioteca con funcionalidad de búsqueda de libros.

Trabajarás con tres archivos editables:

  • book.py - Contiene la definición de la clase Book
  • user.py - Contiene la definición de la clase User
  • library.py - Contiene la clase Library donde implementarás la funcionalidad de búsqueda

Sigue los comentarios TODO en cada archivo para implementar la funcionalidad requerida. Tu tarea principal es añadir un método search_by_title a la clase Library que realice búsquedas que no distingan entre mayúsculas y minúsculas en los títulos de los libros.

Pruébalo tú mismo

from book import Book
from user import User
from library import Library
import time

# Manejador integral de casos de prueba
test_case = input()

if test_case == "search_match":
    library = Library("Community Library")
    
    # Agregar algunos libros
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    library.add_book(Book("Great Expectations", "Charles Dickens", "345678"))
    
    # Buscar libros
    search_term = "great"
    found_books = library.search_by_title(search_term)
    
    print(f"Found {len(found_books)} books matching '{search_term}':")
    for book in found_books:
        print(f"- {book.title} by {book.author}")

elif test_case == "search_no_match":
    library = Library("Community Library")
    
    # Agregar algunos libros
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Buscar libros
    search_term = "nonexistent"
    found_books = library.search_by_title(search_term)
    
    print(f"Found {len(found_books)} books matching '{search_term}'")

elif test_case == "case_insensitive":
    library = Library("Community Library")
    
    # Agregar algunos libros
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Buscar con diferentes mayúsculas y minúsculas
    search_terms = ["GREAT", "great", "Great", "gReAt"]
    
    for term in search_terms:
        found_books = library.search_by_title(term)
        print(f"Search for '{term}': {len(found_books)} book(s) found")

elif test_case == "empty_search":
    library = Library("Community Library")
    
    # Agregar algunos libros
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    library.add_book(Book("Great Expectations", "Charles Dickens", "345678"))
    
    # Buscar con una cadena vacía
    search_term = ""
    found_books = library.search_by_title(search_term)
    
    print(f"Empty search returned {len(found_books)} books (should be all books)")
    print(f"Library has {len(library.books)} total books")

elif test_case == "empty_library":
    library = Library("Empty Library")
    
    # Buscar en una biblioteca vacía
    search_term = "anything"
    found_books = library.search_by_title(search_term)
    
    print(f"Search in empty library returned {len(found_books)} books")

elif test_case == "special_characters":
    library = Library("Special Characters Library")
    
    # Agregar libros con caracteres especiales
    library.add_book(Book("Harry Potter & the Sorcerer's Stone", "J.K. Rowling", "111111"))
    library.add_book(Book("The C++ Programming Language", "Bjarne Stroustrup", "222222"))
    library.add_book(Book("The !@#$%^& Book", "Special Author", "333333"))
    
    # Buscar caracteres especiales
    special_terms = ["&", "++", "!@#"]
    
    for term in special_terms:
        found_books = library.search_by_title(term)
        print(f"Search for '{term}': {len(found_books)} book(s) found")
        for book in found_books:
            print(f"- {book.title}")

elif test_case == "performance_test":
    library = Library("Large Library")
    
    # Agregar muchos libros (100 libros)
    for i in range(1, 101):
        if i % 10 == 0:  # Cada 10º libro tiene "performance" en el título
            library.add_book(Book(f"Performance Book #{i}", f"Author {i}", str(i)))
        else:
            library.add_book(Book(f"Book #{i}", f"Author {i}", str(i)))
    
    # Medir el tiempo de búsqueda
    start_time = time.time()
    search_term = "performance"
    found_books = library.search_by_title(search_term)
    end_time = time.time()
    
    print(f"Found {len(found_books)} books with '{search_term}' in the title")
    print(f"Search took {end_time - start_time:.6f} seconds")
    print(f"First matching book: {found_books[0].title if found_books else 'None'}")

Todas las lecciones de Object Oriented Programming

Practica por tu cuenta: Compilador de Python online