קורס פיתוח מתקדם בפייתון
פרק
>
רמה
רשימות מתקדמות
מיפוי, סינון, צמצום
מטרה
סיימו לערבב ולהפיק גלידה באמצעות Map, Filter ו-Reduce.
חלק מטעמי הגלידה הם במצב נמוך או ריקים, אך יש לנו מספיק חומרים לפצות ולחבר גלידה נוספת. כדי לעשות זאת עליכם להשתמש ב־Map, כלי רב עוצמה שמאפשר לכם לצמצם את כמות הקוד שעליכם לכתוב על ידי כיווץ לולאות וקידוד עם תנאים. פונקציות ה־Filter וה־Reduce משלימות את פונקציית ה־Map ומוסיפות גמישות נחוצה לקוד שלכם.
להתחלת העבודה יש לייבא את Reduce מתוך ספריית functools כדי שתוכלו להשתמש בפונקציה על ידי הוספת קוד זה בתחילת התוכנית: from functools import reduce . פונקציות ה־Map וה־Filter מובנות בשפת Python ואין צורך בייבוא שלהן.
תחילה עליכם לקחת כמה מרכיבים מהמקפיא הזמין, ללכת לסימון X זהוב, לפנות לדלת ולפתוח אותה באמצעות הפונקציה open() . אספו את כל הצנצנות עם "cream" שנמצאות במקפיא ולאחר מכן לכו לסימון X מואר על שטיח ירוק.
ישנם שלושה קבועי רשימה בשדה הנקראים: vanilla, strawberry ו-chocolate . כל קבוע מכיל שילוב של מרכיבים המהווים את טעם הגלידה. בסימון X הירוק, ודאו את תכולת קבוע הרשימה strawberry . ראשית, השתמשו בפונקציה place() כדי להפקיד את ה־"cream" שאספתם קודם, והשתמשו בפונקציה speak() בכדי לוודא את התכולה של קבוע הרשימה strawberry .
לאחר שהאימות הסתיים, הזמן להשתמש בפונקציית ה־Map עם קבוע הרשימה strawberry, שתכולת הרשימה כוללת מספרים עשרוניים. באמצעות הפונקציה map() תוכלו לעגל את כל האלמנטים ברשימה, ובכך להחליף את הצורך לעבור על כל אלמנט בלולאה כדי לעגלם אחד אחד. כדי לעשות זאת, צרו רשימה בשם map1 והשתמשו בפונקציה map() בשילוב עם קבוע הרשימה strawberry והפונקציה round(), באופן הבא: map1 = list(map(round, strawberry)) . לאחר מכן, השתמשו בפונקציה speak() עם map1 כדי לוודא את התוצאה.
כעת, נעבור לפונקציית ה־Filter, הפועלת באופן דומה ל־Map, אך דורשת שימוש בפונקציה משלימה. בתחילת העורך תמצאו פונקציה מוגדרת מראש בשם main_ingredients אשר משמשת לקבוע האם מספר גבוה מהמספר 25 .
def main_ingredients(value):
return value > 25
במקום לעבור על לולאה, ניתן להשתמש בפונקציה זו בשילוב עם הפונקציה filter() כדי להרכיב רשימה חדשה המכילה את הפריטים שעולים על 25, שהם המרכיבים העיקריים. צרו רשימה חדשה בשם filter1 והפעילו את הפונקציה filter() עם main_ingredients ו- map1 כדי לזהות את כל המרכיבים העיקריים מהרשימת Map שיצרתם, באופן הבא: filter1 = list(filter(main_ingredients, value)) . לאחר מכן, השתמשו בפונקציה speak() עם filter1 כדי לוודא את התוצאה.
כעת נעבור ל־Reduce, הפונקציה זו משמשת בדומה ל־Filter, אך מאפשרת לקפל או לצמצם רשימה ליחידה אחת. בדומה ל־Filter, היא משתמשת בפונקציה מותאמת אישית, הפעם בשם custom_sum אשר מחברת באופן דינמי שני מספרים יחד.
def custom_sum(first, second):
return first + second
צרו משתנה בשם reduce1 והשתמשו בפונקציה reduce() בשילוב עם הפונקציה custom_sum ו- filter1 כדי לאחד את כל הפריטים ליחידה אחת, באופן הבא: reduce1 = reduce(custom_sum, filter1) . לאחר מכן, השתמשו בפונקציה speak() עם reduce1 כדי לוודא את התוצאה.
כעת, לאחר שסיימתם את מחזור ה־Map, Filter, Reduce, חזרו על אותו מחזור בסמנים המוארים על שטיחים אדומים וכחולים. על השטיח האדום, השתמשו בקבוע הרשימה vanilla, וצרו את map2, filter2 ו־reduce2 . על השטיח הכחול, השתמשו בקבוע הרשימה chocolate, וצרו את map3, filter3 ו־reduce3 .
לכו אל הסימון האחרון המואר אשר נמצא על שטיח סגול, הוסיפו את reduce1, reduce2 ו־reduce3 המאחדים את המרכיבים העיקריים של vanilla, strawberry ו־chocolate. צרו משתנה בשם neapolitan והוסיפו את כל תוצאות ה־Reduce, באופן הבא: neapolitan = reduce1+reduce2+reduce3 . השתמשו בפונקציה speak() עם השילוב כדי לוודא אותו והשתמשו בפונקציה place() איתו כדי ליצור גלידת ניאפוליטן ולהשלים את הרמה.