Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

خاصية البحث

جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 58 من 64.

challenge icon

التحدي

متوسط

في هذا التحدي، ستقوم بتنفيذ نظام إدارة مكتبة مع خاصية البحث عن الكتب.

ستعمل على ثلاثة ملفات قابلة للتعديل:

  • book.py - يحتوي على تعريف فئة Book
  • user.py - يحتوي على تعريف فئة User
  • library.py - يحتوي على فئة Library حيث ستقوم بتنفيذ وظيفة البحث

اتبع تعليقات TODO في كل ملف لتنفيذ الوظائف المطلوبة. مهمتك الرئيسية هي إضافة طريقة search_by_title إلى فئة Library التي تقوم بعمليات بحث غير حساسة لحالة الأحرف في عناوين الكتب.

جرّب بنفسك

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

# معالج شامل لحالات الاختبار
test_case = input()

if test_case == "search_match":
    library = Library("Community Library")
    
    # إضافة بعض الكتب
    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"))
    
    # البحث عن الكتب
    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")
    
    # إضافة بعض الكتب
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # البحث عن الكتب
    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")
    
    # إضافة بعض الكتب
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # البحث مع اختلاف حالة الأحرف
    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")
    
    # إضافة بعض الكتب
    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"))
    
    # البحث باستخدام سلسلة نصية فارغة
    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")
    
    # البحث في مكتبة فارغة
    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")
    
    # إضافة كتب تحتوي على رموز خاصة
    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"))
    
    # البحث عن الرموز الخاصة
    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")
    
    # إضافة العديد من الكتب (100 كتاب)
    for i in range(1, 101):
        if i % 10 == 0:  # كل كتاب عاشر يحتوي على كلمة "performance" في العنوان
            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)))
    
    # قياس وقت البحث
    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