Menu
CoddyTech

Chức năng tìm kiếm

Thuộc phần Lập trình hướng đối tượng trong hành trình Python của Coddy. Bài học 58 trên 64.

challenge icon

Thử thách

Trung bình

Trong thử thách này, bạn sẽ triển khai một hệ thống quản lý thư viện có chức năng tìm kiếm sách.

Bạn sẽ làm việc với ba tệp có thể chỉnh sửa:

  • book.py - Chứa định nghĩa lớp Book
  • user.py - Chứa định nghĩa lớp User
  • library.py - Chứa lớp Library, nơi bạn sẽ triển khai chức năng tìm kiếm

Làm theo các chú thích TODO trong mỗi tệp để triển khai chức năng cần thiết. Nhiệm vụ chính của bạn là thêm phương thức search_by_title vào lớp Library để tìm kiếm tiêu đề sách không phân biệt chữ hoa chữ thường.

Tự làm thử

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

# Xử lý toàn diện các test case
test_case = input()

if test_case == "search_match":
    library = Library("Community Library")
    
    # Thêm một số cuốn sách
    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"))
    
    # Tìm kiếm sách
    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")
    
    # Thêm một số cuốn sách
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Tìm kiếm sách
    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")
    
    # Thêm một số cuốn sách
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Tìm kiếm với các kiểu viết hoa khác nhau
    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")
    
    # Thêm một số cuốn sách
    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"))
    
    # Tìm kiếm bằng chuỗi (string) rỗng
    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")
    
    # Tìm kiếm trong thư viện trống
    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")
    
    # Thêm sách có ký tự (character) đặc biệt
    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"))
    
    # Tìm kiếm ký tự đặc biệt
    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")
    
    # Thêm nhiều sách (100 cuốn)
    for i in range(1, 101):
        if i % 10 == 0:  # Cứ 10 cuốn thì có một cuốn chứa "performance" trong tiêu đề
            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)))
    
    # Đo thời gian tìm kiếm
    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'}")

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Python online