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

高级函数
闭包

目标

通过设置和使用闭包来调节农场的供水。

有四个水箱被设计用于灌溉周边的农田,现在到了切换它们的时候,以确保将适量的水分送到正确的位置。为此,我们可以利用闭包使工作变得更加简单。

闭包是用于封装数据的嵌套函数,这减少了你需要使用的变量数量,并将数据隐藏在函数内部,从而防止外部修改,换句话说,就是将函数封闭起来。

为了调节水箱中的水量,我们将创建一个作为乘法器的嵌套函数。这个函数的工作方式与循环相似,外部函数名为 multiplier_of(),它的参数会与其内部函数 multiplier() 的参数相乘。

# Nested Function def multiplier_of(n): def multiplier(number): return number*n return multiplier

设置好之后,我们需要通过设置闭包来封闭函数,这可以防止对其值的访问并巩固它们的用途。

# Set up Closure that multiplies any number by 2 multiply_by_2 = multiplier_of(2) # Uses closure to display a number on screen player.speak( multiply_by_2(4) ) # The number displayed is 8, the formula is [2 x 4 = 8]

上面的闭包名为 multiply_by_2(),它使用了我们创建的嵌套函数,并设置了参数 2,即闭包被设置为乘以 2。因此,无论我们作为参数添加哪个数字,都会被乘以 2,并且这一属性由于被封闭而无法更改。

接下来调节水箱,需要设置三个闭包:multiply_by_2multiply_by_3multiply_by_5。请按照之前提供的示例使用相同的格式手动设置它们,例如:multiply_by_2 = multiplier_of(2)

在本关卡中有一个字典常量名为 tanks,作为索引,它包含六种颜色:"red""blue""orange""purple""yellow""green"。每个索引对应一个数字,代表水通过水箱侧边流动的量,该数字将用于利用之前讨论的 “multiply_by” 闭包来调节水箱。

为此,在编辑器中将设置一个名为 regulate_water() 的函数,它接受两个参数:代表上述索引的颜色以及代表要使用的乘法闭包的乘数。该函数的一个使用示例为:regulate_water("red" , multiply_by_2)

走到标有黑色 X 的上方彩色地毯处,面对水箱,使用 regulate_water() 函数,将地毯的颜色作为第一个参数,并将正确的乘法闭包作为第二个参数。各颜色地毯对应使用的乘法闭包如下:

multiply_by_2 - "red" and "green" multiply_by_3 - "blue" and "purple" multiply_by_5 - "orange" and "yellow"

调节每个水箱侧边的水量,以完成本关卡。

代码书