Coding for KidsCoding for Kids
クリエイティブレベル挑戦教師ガイド
機能に投票
上級Python開発コース
チャプター
>
レベル

高度な関数
クロージャ

目的

クロージャを設定して使用することにより、農場の水供給を調整する。

周囲の農地に灌漑するために設計された4つの水槽があります。正しい場所に適切な量の水が分配されるように、これらの水槽の切り替えが必要です。そのために、クロージャを使用すると作業が大幅に簡単になります。

クロージャはデータをカプセル化するために設計された入れ子関数であり、使用する変数の数を減らし、関数内にデータを隠蔽することで外部からの操作ができなくなります。つまり、関数を閉じ込めるということです。

水槽内の水を調整するために、乗数として動作する入れ子関数を作成します。この関数はループと同じように動作し、外側の関数である 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倍にされ、この属性はクロージャによって閉じ込められているため変更できません。

次に、水槽の水を調整するために、3つのクロージャを設定します:multiply_by_2multiply_by_3、および multiply_by_5 。例として以前に示されたフォーマットと同じ方法でそれぞれを手動で設定します。例:multiply_by_2 = multiplier_of(2)

このレベルには定数の辞書 tanks があり、インデックスとして6つの色("red""blue""orange""purple""yellow""green")が含まれています。各インデックスは、水槽の側面を流れる水量を表す数値を保持しており、この数値は前述の「multiply_by」クロージャを使用して水槽を調整するために利用されます。

これを容易にするために、エディタ内で regulate_water() という関数が設定されます。この関数は2つの引数を取ります。1つ目は上記のインデックスを表す色、2つ目は使用する乗数クロージャを表すものです。関数の使用例は次のとおりです:regulate_water("red", multiply_by_2)

暗い X マークの上にある色付きカーペットの方へ向かい、水槽に向かって進みます。regulate_water() 関数を使用し、カーペットの色を最初の引数として、適切な乗数クロージャを2番目の引数として設定してください。各色付きカーペットに使用する乗数は以下のとおりです:

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

各水槽の側面の水を調整して、レベルを完了させてください。

コードブック