上級Python開発コース
チャプター
>
レベル
高度な関数
入れ子関数
目標
入れ子関数を使用して、機械で生産された布を集め、再配布し、保管する。
時には関数の機能を拡張するために、関数の中に別の関数を配置したくなることがあります。これらは 入れ子関数 または内部関数と呼ばれ、関数内にシンプルで再利用可能なコードを作成するため、あるいは関数が外部からの操作を受けないよう保護するためなど、さまざまな用途に用いられます。
ワークショップ内には複数の布製造機があり、中には既に保管可能な布を生産しているものもあれば、布の生産を完了するために糸が必要なものもあります。それぞれの機械の前には、使用方法を示すために、"red" または "green" のカーペットが敷かれています。コードエディタでは、機械を操作し、機械から素材を収集または配置することを可能にする関数が記述されます。
def operate_machine(color):
def collect_cloth():
# Collect Code
player.speak("Cloth is ready for storage")
def place_thread():
# Place Code
player.speak("Machine needed more materials")
if color == "green":
collect_cloth()
if color == "red":
place_thread()
この関数は operate_machine と呼ばれ、引数として color を受け取ります。機械の前に敷かれたカーペットの色に応じて、引数に "red" または "green" を指定すると、機械の操作が変わり、アイテムを配置するか収集するかが決定されます。
この関数内には、それぞれの名前が示す用途に使用される2つの 入れ子関数、すなわち collect_cloth() と place_thread() が含まれています。しかし、これらの関数はその動作を実行するために必要なコード行が不足しています。collect_cloth() には player.collect("cloth") の行を追加し、その後に player.speak("Quilt is ready for storage") を追加してください。同様に、place_thread() には player.place("thread") の行を追加し、その後に player.speak("Machine needed more materials") を追加してください。
入れ子関数に不足しているコード行が追加されたら、クレートの前にある明るいXマークまで歩み、機械で使用するための "thread" を収集してください。以下のように player.collect("thread") を使用します。
ワークショップ内にある暗いXマークまで歩み、機械に向かってカスタム関数 operate_machine を使用してください。Xマークがある場所のカーペットの色に応じて、引数に "red" または "green" を指定します。例えば、operate_machine("red") のようにします。これにより、糸を配置し、布を収集することができます。
すべての布を収集したら、後ろにあるクレートの隣の金色のXマークまで歩み、place() 関数を使用して布を保管してください。まず cloths という変数を作成し、収集した布の数をその変数に代入し、クレートに保管することでレベルをクリアします。例えば、player.place(cloths) のようにします。