Coding for KidsCoding for Kids
创意关卡挑战教师指南
为功能投票
高级 Python 开发课程
第 章
>
第 级

生成器
手动推进一个生成器

目标

使用生成器在手动序列中组合和生产制作面包的材料。

前面有一个设施可以使用压机制作一些面包面团。通常,您会使用 combine() 函数来组合材料,但这里并非如此,这些材料需要先被精炼才能组合。

对于这个任务,我们可以使用生成器,因为它们可以定制输出不同的文件类型,并且它们的序列可以根据命令调用,而不是像函数和循环那样自动输出。以下是一个示例:

def bread(): yield 5 yield "grain"

上述代码有一个生成器,包含两个 yield 语句,其中一个产生一个实数,另一个产生一个字符串。我们可以根据需要使用 next() 函数来生成生成器的值。如下所示:

recipe = bread() # 设置生成器 player.place(next(recipe)) # 调用第一个值 player.collect(next(recipe)) # 调用第二个值

在上面的例子中,生成器被设置好,并且 next() 函数与生成器一起使用,以便在 place() 函数中调用第一个 yield 值。这在第二个值中重复,但其代替用于 collect() 函数中。这使得可以很容易地在不使用多个列表或变量的情况下按顺序调用各种类型的值。

代码编辑器中会定义一个名为 bread() 的生成器,但它需要每种配料的数量以便您精炼面包面团。这些数字写在设施旁的标志上。通过引用生成器来设置它的使用,如下所示:recipe = bread()

首先走到牛奶罐旁边的光亮 X 标记,并使用生成器 next() 函数 collect() 罐中剩余的牛奶,像这样:player.collect(next(recipe))。然后走到标志旁边的金色 X 标记,使用 speak() 函数来获得生成器需要的面包数量并将它们写在生成器中。数据存储在名为 "sign" 的常量中,可以像这样调用它:player.speak(sign)

一旦在生成器中输入了所有值,进入设施,在深色 X 标记上使用 player.place(next(recipe)),在浅色 X 标记上使用 player.collect(next(recipe)) 以完成关卡。

代码书