Coding for KidsCoding for Kids
שלבים יצירתייםאתגריםמדריך למורים
הצבע על תכונות
קורס פיתוח מתקדם בפייתון
פרק
>
רמה

דקורטורים
שרשור דקורטורים

מטרה

קשטו את הגג בדגלים צבעוניים על ידי שרשור דקורטורים.

לגג יש קצת אוויר טרי לאחר שהיה כל כך זמן סגור בתוך המטבח, וקווים מסוימים אינם כוללים דגלים. יהיה רעיון טוב להניח אותם בזמן שאתם כאן, אך זה יכול להיות מסובך בהתחשב בכך שאתם צריכים דגלים שונים להנחת קו. ניתן להשיג זאת על ידי שרשור דקורטורים.

דקורטורים משורשרים על ידי הכפלת סימני ה-@, כלומר, הוספת דקורטורים מרובים על פונקציה אחת. לדוגמה, הדבר מאפשר להכניס פונקציה בין שתי פונקציות דקורטור:

# 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")

קוד זה מדגים פונקציה עם דקורטורים משורשרים, כאשר הדקורטורים משולבים בפונקציה כך שעל קצוות הקו מונחים דגלים כחולים, בשכבה הפנימית מונחים דגלים אדומים ולבסוף במרכז מונח דגל ירוק. כולם נוספים לרשימה בשם line, זו היא השיטה שתשמש להנחת הדגלים על הקווים.

התחל בהליכה לסימן X הזהוב ובשימוש בפונקציה read() כדי לבדוק את ההוראות הרשומות על השלט. כאן יופיעו ההוראות לגבי אילו דגלים להניח ואיפה, כאשר ישנם שלושה סוגים שונים של דגלים צבעוניים: "red", "green" ו-"blue". לכל קו יהיו כל שלושת הדגלים, אחד (1) במרכז הקו, שני (2) בקו הפנימי ושניים (2) בקו החיצוני, זאת סך הכל חמישה (5) דגלים לכל קו בדומה לקו המוכן מראש בצד שמאל התחתון של המפה.

ישן לסימן X הבהיר והשתמש בפונקציה collect() כדי לקחת את ה"flags" מהארגז. לאחר מכן עבור ללכת לסימני X הכהים ומ- left to right התחל להניח את הדגלים בסדר שתואר בהוראות שקראת קודם.

השתמש בפונקציות האמצע להשגת זאת, לדוגמה: 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 ))

השתמש בשני הסימני @ כדי להוסיף דקורטורים לפונקציה, ולאחר מכן מלא את הפרמטרים בline.append ואת צבע הדגל במחרוזת. עשה זאת בהתאם להוראות שעל השלט כדי להשלים את הרמה.

ספר קוד