خاصية البحث
جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 58 من 64.
التحدي
متوسطفي هذا التحدي، ستقوم بتنفيذ نظام إدارة مكتبة مع خاصية البحث عن الكتب.
ستعمل على ثلاثة ملفات قابلة للتعديل:
book.py- يحتوي على تعريف فئة Bookuser.py- يحتوي على تعريف فئة Userlibrary.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
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكال3خصائص الـ Class
متغيرات الـ Instance مقابل متغيرات الـ ClassProperty Decoratorsالسمات الخاصةمراجعة - مدير الحساب البنكي6التغليف (Encapsulation)
الأعضاء العامة والمحمية والخاصةمحددات الوصولإخفاء المعلوماتProperty Decorators متقدمةمراجعة - نظام سجلات الطلاب12مشروع: إدارة المكتبة
نظرة عامة على المشروعفئات الكتاب والمستخدمنظام الاستعارةخاصية البحثواجهة المسؤولالاختبار والتكامل