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.
Thử thách
Trung bìnhTrong 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 Bookuser.py- Chứa định nghĩa lớp Userlibrary.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
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTham số selfPhương thứcThuộc tínhPhương thức khởi tạo (__init__)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnHàm super()Ghi đè phương thứcKế thừa đa lớpThứ tự phân giải phương thứcÔn tập: hệ thống phân cấp nhân viên2Decorator
Giới thiệu về decoratorDecorator thuộc tínhDecorator phương thức tĩnhDecorator phương thức lớp5Tính đa hình
Xem lại cách ghi đè phương thứcKiểu gõ vịtLớp và phương thức trừu tượngThiết kế giao diệnÔn tập: máy tính hình học8Các khái niệm OOP nâng cao
Kết hợp và kế thừaMixinPhương thức tĩnh và phương thức lớpDecorator lớpTrình quản lý ngữ cảnh3Thuộc tính của lớp
Biến của instance và biến của lớpDecorator thuộc tínhThuộc tính riêng tưÔn tập: trình quản lý tài khoản ngân hàng6Đóng gói
Thành viên public, protected, privateBộ điều chỉnh quyền truy cậpẨn thông tinDecorator thuộc tính nâng caoÔn tập: Hệ thống hồ sơ học sinh12Dự án: Quản lý thư viện
Tổng quan về dự ánLớp sách và người dùngHệ thống mượn sáchChức năng tìm kiếmGiao diện quản trịKiểm thử và tích hợpTự luyện tập: Trình biên dịch Python online