上級Python開発コース
チャプター
>
レベル
高度な関数
部分関数
目的
部分関数を使用して、ドックに配送された建築資材を梱包および配置します。
一部の資材がドックに配送されたので、それらを建築資材として使用できるように梱包して保管する必要があります。資材は布で包み、糸で縛られなければなりません。梱包時に全てのアイテムの重量を計ることが、後で効果的に輸送するために非常に重要です。これを容易にするために、部分関数を利用してこのプロセスを最適化することができます。
部分関数とは、ほとんど同じ値が必要な引数を省略することで関数を短縮化したカスタム関数です。これにより、複数の引数を取る関数を、1つまたは必要な数だけの引数で実行することが可能となります。
from functools import partial
まず、functoolsというモジュールからpartialをインポートする必要があります。これにより、部分関数を作成できるようになります。インポート文は常にコードエディターの最上部に配置します。
weightという名前の関数を設定し、3つの引数 thread、cloth、および material を取るようにします。この関数は梱包された資材の重量を計算するためのもので、部分関数を通じてこのプロセスをさらに最適化することができます。
def weight(thread, cloth, material):
return 2 * thread + 5 * cloth + material * 10
package = partial(weight, 4, 2)
packageという部分関数を作成します。これはラムダ関数と同様のプロセスで設定されます。partial()を用いて関数を作成し、関数名と固定値として割り当てたい引数を追加してください。
元の関数で割り当てなかった引数は、部分関数で指定しなければならない引数となります。package()部分関数の場合、それはmaterial引数です。
暗いX印の前にあるクレートへ歩いて行き、梱包資材を手に入れます。黄色いカーペット上のX印では、collect()関数を使用して"thread"を取得し、紫のカーペット上のX印では、collect()関数を使用して"cloth"を取得してください。これらのアイテムは資材の梱包に使用されます。
ドックを渡って全ての建築資材を入手してください。これらは、bricks、planks、red_bricks、および wood です。取得後、各資材の数を該当する資材名の変数に加えます。例えば、bricks = 3 のようにします。
その後、明るいX印の前のクレートに向かい、各建築資材の重量を計算した上で保管します。speak()関数とpackage()部分関数を組み合わせて重量を計算してください。例えば、以下のように資材の変数をpackage()関数の引数として使用します:
player.speak("Package weighs %s pounds" % package(bricks)) player.place(package(bricks))
この後、place()関数を使用して、上記の例のようにpackage()関数を利用して資材をクレートに保管します。
明るいX印で、redカーペット上ではbricksを、blueカーペット上ではplanksを、orangeカーペット上ではred_bricksを、greenカーペット上ではwoodをそれぞれ計量して保管してください。レベルを完了するために、これら4種類の資材を正しいクレートに計量し、保管する必要があります。