Продвинутый курс разработки на 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 на цветных коврах, чтобы завершить уровень.