Menu
Coddy logo textTech

Funcionalidade de Busca

Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 58 de 64.

challenge icon

Desafio

Médio

Neste desafio, você implementará um sistema de gerenciamento de biblioteca com funcionalidade de busca de livros.

Você trabalhará com três arquivos editáveis:

  • book.py - Contém a definição da classe Book
  • user.py - Contém a definição da classe User
  • library.py - Contém a classe Library onde você implementará a funcionalidade de busca

Siga os comentários TODO em cada arquivo para implementar a funcionalidade necessária. Sua principal tarefa é adicionar um método search_by_title à classe Library que realize buscas insensíveis a maiúsculas e minúsculas nos títulos dos livros.

Folha de consulta

Este desafio foca na implementação de um sistema de gerenciamento de biblioteca com três componentes principais:

  • Classe Book - Representa livros individuais no sistema
  • Classe User - Representa usuários da biblioteca
  • Classe Library - Gerencia livros e fornece funcionalidade de busca

A funcionalidade principal a ser implementada é um método search_by_title que realiza buscas que não diferenciam maiúsculas de minúsculas nos títulos dos livros.

Experimente você mesmo

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

# Manipulador abrangente de casos de teste
test_case = input()

if test_case == "search_match":
    library = Library("Community Library")
    
    # Adiciona alguns livros
    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"))
    
    # Busca por livros
    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")
    
    # Adiciona alguns livros
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Busca por livros
    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")
    
    # Adiciona alguns livros
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Busca com diferentes variações de maiúsculas e 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")
    
    # Adiciona alguns livros
    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"))
    
    # Busca com string vazia
    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")
    
    # Busca em biblioteca vazia
    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")
    
    # Adiciona livros com caracteres especiais
    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"))
    
    # Busca por caracteres especiais
    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")
    
    # Adiciona muitos livros (100 livros)
    for i in range(1, 101):
        if i % 10 == 0:  # Cada 10º livro tem "performance" no 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)))
    
    # Mede o tempo de busca
    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 as lições de Object Oriented Programming