Menu
Coddy logo textTech

Fonctionnalité de recherche

Fait partie de la section Object Oriented Programming du Journey Python de Coddy — leçon 58 sur 64.

challenge icon

Défi

Moyen

Dans ce défi, vous allez implémenter un système de gestion de bibliothèque avec une fonctionnalité de recherche de livres.

Vous travaillerez avec trois fichiers modifiables :

  • book.py - Contient la définition de la classe Book
  • user.py - Contient la définition de la classe User
  • library.py - Contient la classe Library où vous implémenterez la fonctionnalité de recherche

Suivez les commentaires TODO dans chaque fichier pour implémenter la fonctionnalité requise. Votre tâche principale consiste à ajouter une méthode search_by_title à la classe Library qui effectue des recherches insensibles à la casse sur les titres de livres.

Aide-mémoire

Ce défi se concentre sur la mise en œuvre d'un système de gestion de bibliothèque avec trois composants principaux :

  • Book class - Représente les livres individuels dans le système
  • User class - Représente les utilisateurs de la bibliothèque
  • Library class - Gère les livres et fournit une fonctionnalité de recherche

La fonctionnalité clé à implémenter est une méthode search_by_title qui effectue des recherches insensibles à la casse sur les titres de livres.

Essayez vous-même

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

# Gestionnaire de cas de test complet
test_case = input()

if test_case == "search_match":
    library = Library("Community Library")
    
    # Ajouter quelques livres
    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"))
    
    # Rechercher des livres
    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")
    
    # Ajouter quelques livres
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Rechercher des livres
    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")
    
    # Ajouter quelques livres
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Rechercher avec différentes casses
    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")
    
    # Ajouter quelques livres
    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"))
    
    # Rechercher avec une chaîne vide
    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")
    
    # Rechercher dans une bibliothèque vide
    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")
    
    # Ajouter des livres avec des caractères spéciaux
    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"))
    
    # Rechercher des caractères spéciaux
    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")
    
    # Ajouter de nombreux livres (100 livres)
    for i in range(1, 101):
        if i % 10 == 0:  # Chaque 10ème livre contient "performance" dans le titre
            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)))
    
    # Mesurer le temps de recherche
    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'}")

Toutes les leçons de Object Oriented Programming