קורס פיתוח מתקדם בפייתון
פרק
>
רמה
מחוללים
שליחת נתונים למייצר
מטרה
אסוף צמר וסובב אותו לחוט באמצעות גלגלי הסיבוב על ידי שליחת נתונים למחולל.
חלק מהכבשים הופכות לצמריות מדי, ולכן עדיף לגזור אותן ולאסוף את צמרן. לאחר מכן, ניתן להעביר את הצמר דרך גלגל סיבוב כדי להפיק חוט. כדי להשיג זאת, נצטרך להשתמש במחולל מכיוון שכמויות החוט והצמר המעובדים יכולות להשתנות מאוד.
ראשית, הגדר מחולל המסוגל לסובב חוט, וקרא לו spin(). יש להגדיר את המחולל כך שישתמש בקלט חיצוני כדי לפעול. הוא קורא נתונים מ-yield ומניח אותם במשתנה, ולאחר מכן משנה את תוכנו על ידי הגדלת אורכו בכל מחזור, ולבסוף מייצר תוצאה.
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
מכיוון שזהו מחולל, ניתן לעשות השהיה בשורת while() הפנימית ולשנות אותה כך שתפיק את הפלט הרצוי. רמת בקרה זו היא במהות המחולל וכיצד הוא יכול להיות שימושי בעיבוד נתונים. כדי להכניס נתונים למחולל, הגדר אותו והשתמש בפונקציה send() להזנת כל נתון שתרצה, לדוגמה:
spindle = spin() # Create an instance of the generator next(spindle) # Run the generator a single step spindle.send(6) # Insert data into the generator # In this case you're sending it the number 6
לך לסמני "X" המוארים ליד השטיחים הצבעוניים ועמוד מול הכבשים. יש קבוע מילוני בשם sheep המכיל את הערך של כמות הצמר שתוכל לגזור מכל כבש. השתמש בפונקציה speak() עם המילון וצבע השטיח שעליו אתה עומד, כדי לגזור את צמר הכבשים ולבדוק כמה אספת. לדוגמה: player.speak(sheep["green"]) .
ישנם ארבע (4) שטיחים צבעוניים בסך הכל: "green", "red", "blue" ו-"orange". לאחר שגזרת את הכבשים, לך לסמני "X" החשוכים ליד כל שטיח צבעוני בהם ממוקמים גלגלי הסיבוב. השתמש ב-send() כדי להזין את מספר הפאונדות של הצמר שגזרת מכל כבש בצבע המתאים לתוך המחולל.
לדוגמה, אם בעת גזירת הכבשים בשטיח "green" אתה גוזר 4 פאונדות צמר, עבור לשטיח "green" ליד גלגלי הסיבוב ושלח את הנתונים למחולל, כך:
next(spindle) spindle.send( 4)
עשה זאת עבור כל ארבע (4) סימני "X" החשוכים על השטיחים הצבעוניים כדי להשלים את השלב.