خاصية البحث
جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 58 من 64.
التحدي
متوسطفي هذا التحدي، ستقوم بتنفيذ نظام إدارة مكتبة مع خاصية البحث عن الكتب.
ستعمل على ثلاثة ملفات قابلة للتعديل:
book.py- يحتوي على تعريف فئة Bookuser.py- يحتوي على تعريف فئة Userlibrary.py- يحتوي على فئة Library حيث ستقوم بتنفيذ وظيفة البحث
اتبع تعليقات TODO في كل ملف لتنفيذ الوظائف المطلوبة. مهمتك الرئيسية هي إضافة طريقة search_by_title إلى فئة Library التي تقوم بعمليات بحث غير حساسة لحالة الأحرف في عناوين الكتب.
ورقة مرجعية
يركز هذا التحدي على تنفيذ نظام إدارة مكتبة يتكون من ثلاثة مكونات رئيسية:
- Book class - يمثل الكتب الفردية في النظام
- User class - يمثل مستخدمي المكتبة
- Library class - يدير الكتب ويوفر وظيفة البحث
الوظيفة الأساسية المطلوب تنفيذها هي طريقة search_by_title التي تقوم بعمليات بحث غير حساسة لحالة الأحرف في عناوين الكتب.
جرّب بنفسك
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مشروع: إدارة المكتبة
نظرة عامة على المشروعفئات الكتاب والمستخدم