Coding for KidsCoding for Kids
Креативни НиваПредизвикателстваРъководство за Учители
Гласувайте за функции
Курс по усъвършенствано разработване с Python
Глава
>
Ниво

Генератори
Изпращане на данни към генератор

Цел

Съберете вълната и я преправете на конец, използвайки въртеливостите чрез изпращане на данни към генератор.

Някои от овцете стават малко твърде шерстени, затова е най-добре да ги обреже и да съберете вълната им. След това можете да пропуснете вълната през въртеливост, за да произведете конец. За да постигнем това, трябва да използваме генератор, тъй като количествата конец и вълна, които се обработват, могат да варират значително.

Първо дефинирайте генератор, способен да върти конец, като го именувате 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() # Създаване на екземпляр на генератора next(spindle) # Изпълнение на генератора за един цикъл spindle.send(6) # Въвеждане на данни в генератора # В този случай подавате числото 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 на оцветените килими, за да завършите нивото.

Книга с Код