دورة تطوير بايثون المتقدمة
الفصل
>
المستوى
المُزيِّنات
تسلسل الزينة
الهدف
زيّن السطح بأعلام ملونة باستخدام دمج الـ decorators.
يحظى السطح ببعض الهواء النقي بعد أن كان محتجزًا داخل تلك المطبخ لفترة طويلة، ولكن بعض الخطوط لا تحتوي على أعلام. سيكون من الجيد ترتيبها أثناء وجودك هنا، على الرغم من أن الأمر قد يكون معقدًا نظرًا لأنك تحتاج إلى أعلام متنوعة لترتيب الخط. يمكنك القيام بذلك عن طريق دمج الـ decorators.
يتم دمج الـ decorators عن طريق تكرار رمز الـ @، أي تثبيت عدة decorators على دالة واحدة. على سبيل المثال، يتيح لك ذلك وضع دالة بين دالتين decorator:
# List to add flags to a line
line = []
# Decorator adding a red flag
def red_flag(func):
def add_flag():
line.append("red")
player.speak("Two red flags added to the line")
func()
line.append("red")
return add_flag
# Decorator adding a blue flag
def blue_flag(func):
def add_flag():
line.append("blue")
player.speak("Two blue flags added to the line")
func()
line.append("blue")
return add_flag
# Decorated Function adding line and middle flag
@blue_flag
@red_flag
def middle_green():
line.append("green")
player.speak("A green flag has been added to the line")
يوضح الكود أعلاه دالة بها decorators متسلسلة، حيث يتم تضمين هذه الـ decorators في الدالة بحيث تُوضع أعلام زرقاء على أطراف الخط، وتُوضع أعلام حمراء في الطبقة الداخلية، وأخيرًا يُوضع علم أخضر في المنتصف. يتم إضافة جميعها إلى قائمة باسم line، وهذه هي الطريقة المستخدمة لترتيب الأعلام على الخطوط.
ابدأ بالسير نحو علامة X الذهبية واستخدم دالة read() لقراءة التعليمات الموجودة على لوح الإعلانات. هنا ستخبرك التعليمات بالأعلام التي يجب وضعها وأماكنها، حيث يوجد ثلاث (3) أنواع مختلفة من الأعلام الملونة: "red" و "green" و "blue". سيكون في كل خط جميع هذه الأعلام، علم واحد (1) في منتصف الخط، وعلمان (2) في الخط الداخلي، وعلمان (2) في الخط الخارجي، مما يجعل الإجمالي خمسة (5) أعلام لكل خط، تمامًا مثل الخط المعد مسبقًا في الجانب السفلي الأيسر من الخريطة.
توجه إلى علامة X الفاتحة واستخدم دالة collect() لجمع "flags" من الصندوق. ثم تابع بالسير نحو علامات X الداكنة ومن اليسار إلى اليمين ابدأ بوضع الأعلام بالترتيب الذي تم توصيفه في التعليمات التي قرأتها سابقًا. استخدم الدوال الوسطى لتحقيق ذلك؛ على سبيل المثال: دالة middle_green() تنشئ خط أعلام مثل هذا: ["blue", "red", "green" ,"red","blue" ]. ثم استخدم دالة place() لترتيب الخط باستخدام قائمة line، كما يلي: place(line).
بين كل علامة X، قم بتفريغ قائمة line باستخدام دالة clear()، كما يلي: line.clear()، مما يسمح لك بإعادة استخدام القائمة دون الحاجة لإنشاء واحدة جديدة لكل خط. العلامة X النهائية على اليمين تتطلب دالة مخصصة:
@
@
def middle_custom():
line.append( Insert append )
player.speak("%s flag has been added to the line"
% ( insert flag ))
استخدم رمزي @ لإضافة decorators إلى الدالة، ثم أكمل عملية الإضافة إلى قائمة line ولون العلم في السلسلة النصية. افعل ذلك وفقًا للتعليمات الموجودة على اللوحة لإكمال المستوى.