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

Генератори
Създаване на генератор

Понякога може да искате да генерирате стойности последователно, вместо да получите еднократен изход. По подобие на това как работят функциите, генераторите се пишат и изпълняват по същия начин, с изключение че използват 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() за придобиване на "milk" от машината. След това използвайте 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, за да завършите нивото.

Книга с Код