في اللحظة الثانية التي يصبح فيها كل شيء على ما يرام، اعتبر المشروع ممتعًا. لقد قمت ببناء مشروع CLI صديق للعميل لفهم كيفية عمل الفصل والأساليب والخصائص.
كانت بنية الدليل الخاص بي بسيطة جدًا:
└── ليب
├── النماذج
│ ├── __init__.py
│ └──فاعل.py
| └── movie.py
├── cli.py
├── تصحيح الأخطاء
└── helpers.py
├── ملف بيب
├── Pipfile.lock
├── README.md
كما ترون من الهيكل، قمت ببناء ارتباط واحد إلى متعدد حيث يكون لدى الممثل العديد من الأفلام. من هذه الرابطة دخلت قائمتي حيز التنفيذ.
تم تعريف قائمتي أعلاه بواسطة وظيفة تسمى... Menu() والتي كانت موجودة في ملف cli.py الخاص بي بالإضافة إلى main() التي تعرض للمستخدم قائمة CLI:
def main(): while True: welcome() menu() choice = input("> ").strip() if choice == "1": actor_list() elif choice == "2": add_actor() elif choice == "3": delete_actor() elif choice == "4": exit_program() break else: print("Invalid choice. Try again.\n")
كانت هذه الوظيفة المحددة هي الأولى من بين العديد من الوظائف التي تم فيها تنفيذ حلقة while مع عبارات if/elif/else لمنح مستخدمنا القدرة على التنقل في قوائمنا بسهولة.
يتم بعد ذلك اختتام cli.py ببعض مجموعات التعليمات البرمجية المهمة:
if __name__ == "__main__": main()
تخبر كتلة التعليمات البرمجية هذه مترجمنا (Python) بتشغيل ملفنا فقط إذا تم استدعاؤه من سطر الأوامر.
كانت هناك أيضًا وظائف مساعدة متضمنة في هذا المشروع والتي استخدمت أيضًا حلقة while مع عبارات if/elif/else. يبرز أحدهم على وجه الخصوص في إظهار سهولة التنقل عند اختيار قائمة الممثلين الحالية لدينا على سبيل المثال:
def actor_list(): actor_list = Actor.get_all() if actor_list: print("\n*** UPDATED LIST! ***") for i, actor in enumerate(actor_list, start=1): print(f"{i}. {actor.name}") while True: choice = input("Press 'a' to add an actor\n" "Press 'b' for actor profile\n" "Press 'c' to return to the main menu.\n" "Press 'd' delete an actor.\n").lower() if choice == 'a': add_actor() break elif choice == 'b': actor_profile() break elif choice == 'c': return elif choice == 'd': delete_actor() break else: print("Invalid choice. Please try again.") else: print("List empty!") while True: choice = input("Press 'a' or to add an actor\n" "Press 'b' for main menu.\n").lower() if choice == 'a': add_actor() break elif choice == 'b': return else: print("Invalid choice. Please try again.")
هنا لم اعتد على حلقة while وعبارات if فحسب، بل حصدت أيضًا فوائد المظهر والترتيب باستخدام enumerate() مع حلقة for للتكرار مع فهرس في python مما يسمح لجميع القوائم من خلال المشروع لتكون قائمة مرتبة.
شخصيتانا الرئيسيتان بالطبع هما ممثل الفصول والفيلم. كلاهما يتكون من تعليمات برمجية مماثلة من حيث أساليب الفئة عند إنشاء أو تحديث أو حذف مثيل لتلك الفئة المعينة، ولكن هناك اختلافات:
لنأخذ فصل الأفلام على سبيل المثال:
class Movie: all_movies = {} def __init__(self, movie, genre, actor_id, id=None): self.id = id self.movie = movie self.genre = genre self.actor_id = actor_id
نظرًا لأن لدينا إعداد مشروعنا حيث يكون للممثل العديد من الأفلام، فإن فئة الفيلم الخاصة بنا ستحتوي على معلمة/سمة معرف الممثل الفريدة لإنشاء رابط بين مثيل الفيلم وممثل معين، مما يتيح سهولة الرجوع إلى معلومات الممثل.
]انظر الآن إلى مقطع التعليمات البرمجية هذا في فئة الممثل لدينا:
def movies(self): from models.movie import Movie sql = """ SELECT * FROM movie WHERE actor_id = ? """ CURSOR.execute(sql, (self.id,),) rows = CURSOR.fetchall() return [ Movie.instance_from_db(row) for row in rows ]
هنا لدينا طريقة الأفلام () الخاصة بنا لاسترداد جميع الأفلام المرتبطة بمثيل الممثل الحالي عن طريق الاستعلام عن جدول الأفلام باستخدام معرف الممثل. سيؤدي هذا بعد ذلك إلى إرجاع قائمة بكائنات الفيلم، وإنشاء علاقة "لديه العديد" بين الممثل والفيلم.
كانت كتل التعليمات البرمجية التي تمت مناقشتها هي المجالات الأساسية للمشروع حيث ركزت على استيعاب المزيد من الفهم. بشكل عام، كان هذا المشروع بمثابة تمرين جيد لتعزيز مهاراتي في لغة بايثون.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3