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

生成器
创建一个生成器

有时候你可能希望生成一个连续的值,而不是一次性的输出。类似于函数的工作方式,生成器的编写和执行方式相同,不同之处在于它们在生成输出时使用 yield() 而不是 return()

在这个练习中,你必须从马厩的储罐中为瓶子装满牛奶。使用生成器迭代地填满瓶子,确保从储罐中收集任何多余的牛奶。

Guide

目标

使用发电机从储奶罐中抽取牛奶并将其灌装到瓶子中。

存储牛奶的机器几乎满了,你需要在牛奶变质之前将它瓶装并储存起来。用一般的方法完成这项任务可能有点棘手,并且你能抽取的牛奶量可能会有所不同。幸运的是,你可以使用发电机使这个过程变得顺畅而简单。

有两个(2)个需要抽出并瓶装其牛奶的罐子。每台机器都有储存牛奶的隔间,这些由名为 tank_atank_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”(牛奶)的 for 循环。随后使用 speak() 检查每个瓶子收集了多少牛奶。例如:

for bottles in fill(tank_a): player.collect("milk") player.speak("%d pints of milk collected" % (bottles))

在两个 X 标记上编写并使用这个 for 循环,亮 X 标记上使用参数 tank_a,暗 X 标记上使用参数 tank_b,以便完成关卡。

代码书