Suchfunktionalität
Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 58 von 64.
Aufgabe
MittelIn dieser Herausforderung implementieren Sie ein Bibliotheksverwaltungssystem mit einer Buchsuchfunktion.
Sie arbeiten mit drei bearbeitbaren Dateien:
book.py- Enthält die Definition der Klasse Bookuser.py- Enthält die Definition der Klasse Userlibrary.py- Enthält die Klasse Library, in der Sie die Suchfunktion implementieren
Folgen Sie den TODO-Kommentaren in jeder Datei, um die erforderliche Funktionalität zu implementieren. Ihre Hauptaufgabe besteht darin, der Klasse Library eine Methode search_by_title hinzuzufügen, die eine Suche in Buchtiteln ohne Berücksichtigung der Groß- und Kleinschreibung durchführt.
Spickzettel
Diese Herausforderung konzentriert sich auf die Implementierung eines Bibliotheksverwaltungssystems mit drei Hauptkomponenten:
- Book-Klasse - Repräsentiert einzelne Bücher im System
- User-Klasse - Repräsentiert Bibliotheksbenutzer
- Library-Klasse - Verwaltet Bücher und bietet Suchfunktionen
Die wichtigste zu implementierende Funktionalität ist eine search_by_title-Methode, die eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung in Buchtiteln durchführt.
Probier es selbst
from book import Book
from user import User
from library import Library
import time
# Umfassender Testfall-Handler
test_case = input()
if test_case == "search_match":
library = Library("Community Library")
# Einige Bücher hinzufügen
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"))
# Nach Büchern suchen
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")
# Einige Bücher hinzufügen
library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
# Nach Büchern suchen
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")
# Einige Bücher hinzufügen
library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
# Suche mit verschiedenen Schreibweisen (Groß-/Kleinschreibung)
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")
# Einige Bücher hinzufügen
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"))
# Suche mit leerem String
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")
# Suche in leerer Bibliothek
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")
# Bücher mit Sonderzeichen hinzufügen
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"))
# Nach Sonderzeichen suchen
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")
# Viele Bücher hinzufügen (100 Bücher)
for i in range(1, 101):
if i % 10 == 0: # Jedes 10. Buch hat "performance" im Titel
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)))
# Suchzeit messen
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'}")Alle Lektionen in Object Oriented Programming
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktor-Methode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDie super()-FunktionMethoden überschreibenMehrfachvererbungMethod Resolution OrderZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden
Einführung in Magic MethodsOperator-ÜberladungMagic Methods für ContainerRückblick - Eigene Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung2Dekoratoren
Einführung in DekoratorenProperty-DekoratorStatischer Methoden-DekoratorKlassenmethoden-Dekorator5Polymorphismus
Methoden-Überschreiben vertieftDuck TypingAbstrakte Klassen und MethodenInterface-DesignZusammenfassung – Formen-Rechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische und KlassenmethodenKlassendekoratorenContext Manager3Klasseneigenschaften
Instanz- vs. KlassenvariablenProperty-DekoratorenPrivate AttributeZusammenfassung – Bankkonto-Manager6Kapselung
Public, Protected, Private MemberZugriffsmodifikatorenInformation HidingProperty-Decorators für FortgeschritteneZusammenfassung - Studentenverwaltungssystem12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen