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

גנרטורים
יצירת מחולל

לפעמים אתם עשויים לרצות ליצור ערכים באופן עקבי במקום פלט חד פעמי. בדומה לאופן שבו פונקציות פועלות, גנרטורים נכתבים ומבוצעים באותו אופן פרט לכך שהם משתמשים ב-yield() במקום ב-return() כאשר מפיקים פלט.

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

Guide

מטרה

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

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

ישנם שני (2) מכלים עם חלב שצריך לשאוב ולבקבק. לכל מכונה יש תאים המאחסנים חלב, אלו מיוצגים על ידי קבועים ברשימה בשם: tank_a ו-tank_b. בנוסף, לכל מכל יש בדרך כלל שארית שניתן לאסוף.

גנרטורים עוקבים אחרי אותה תחביר כמו פונקציות, אך ישתמשו ב-yield במקום ב-return עבור הפלט שלהם. הגדירו גנרטור בשם fill() והגדירו אותו עם הארגומנט list, שם תכניסו את הקבועים שהוזכרו בפסקה לעיל.

def fill(list): for x in range(3): yield list[x] yield 5

הגנרטור קורא את הנתונים משלושת (3) השדות ברשימת הקבועים, המיוצגים על ידי התאים במכונה, ומוסיף שארית בסוף אשר היא חמש (5).

אספו את אובייקט הסל בשדה כדי לקבל גישה אל הבקבוקים הנדרשים למילוי והתקדמו אל שתי (2) הסימנים X לאיסוף החלב באמצעות לולאת for.

בזכות הצהרת yield הערכים המיוצרים מהגנרטור ניתנים לקריאה ישירות מלולאת for גם כן. הגדירו אחת המשתמשת בפונקציה collect() לצורך רכישת ה-"חלב" מהמכונה. לאחר מכן השתמשו ב-speak() כדי לבדוק כמה חלב נאגר בכל בקבוק. לדוגמא:

for bottles in fill(tank_a): player.collect("milk") player.speak("%d pints of milk collected" % (bottles))

כתבו והשתמשו בלולאת for זו על שני סימני ה-X, על סימן ה-X הבהיר השתמשו בארגומנט tank_a ועל סימן ה-X הכהה השתמשו בארגומנט tank_b על מנת להשלים את השלב.

ספר קוד