Menu
Coddy logo textTech

Arama İşlevselliği

Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 58 / 64.

challenge icon

Görev

Orta

Bu meydan okumada, kitap arama işlevine sahip bir kütüphane yönetim sistemi uygulayacaksınız.

Düzenlenebilir üç dosya üzerinde çalışacaksınız:

  • book.py - Book sınıfı tanımını içerir
  • user.py - User sınıfı tanımını içerir
  • library.py - Arama işlevini uygulayacağınız Library sınıfını içerir

Gerekli işlevselliği uygulamak için her dosyadaki TODO yorumlarını takip edin. Ana göreviniz, Library sınıfına kitap başlıkları üzerinde büyük/küçük harf duyarsız aramalar yapan bir search_by_title yöntemi eklemektir.

Kopya kağıdı

Bu meydan okuma, üç ana bileşenden oluşan bir kütüphane yönetim sistemi uygulamaya odaklanmaktadır:

  • Book sınıfı - Sistemdeki bireysel kitapları temsil eder
  • User sınıfı - Kütüphane kullanıcılarını temsil eder
  • Library sınıfı - Kitapları yönetir ve arama işlevselliği sağlar

Uygulanacak temel işlevsellik, kitap başlıklarında büyük/küçük harf duyarsız aramalar gerçekleştiren bir search_by_title yöntemidir.

Kendin dene

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

# Kapsamlı test durumu işleyicisi
test_case = input()

if test_case == "search_match":
    library = Library("Community Library")
    
    # Bazı kitaplar ekle
    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"))
    
    # Kitapları ara
    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")
    
    # Bazı kitaplar ekle
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Kitapları ara
    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")
    
    # Bazı kitaplar ekle
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Farklı büyük/küçük harf durumlarıyla ara
    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")
    
    # Bazı kitaplar ekle
    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"))
    
    # Boş dize ile ara
    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")
    
    # Boş kütüphanede ara
    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")
    
    # Özel karakter içeren kitaplar ekle
    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"))
    
    # Özel karakterleri ara
    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")
    
    # Çok sayıda kitap ekle (100 kitap)
    for i in range(1, 101):
        if i % 10 == 0:  # Her 10. kitabın başlığında "performance" ifadesi geçer
            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)))
    
    # Arama süresini ölç
    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'}")

Object Oriented Programming bölümündeki tüm dersler