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)

在所有四色彩地毯的黑色X标记处都这样做,以完成这一关。

代码书