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

デコレーター
デコレーターの連鎖

目的

デコレータを連鎖させて、色付きの旗で屋根を飾ろう。

あのキッチンに長い間閉じ込められていた後、屋根には新鮮な空気が流れていますが、いくつかのラインには旗がありません。ここにいるうちにそれらを設置するのは良い考えですが、各ラインに様々な旗が必要なため、少々手間がかかります。

これを実現するには、デコレータを連鎖させます。

デコレータは @ 記号を重ねることで連鎖され、すなわち、1 つの関数に対して複数のデコレータを適用します。例えば、これによりある関数を 2 つのデコレータ関数で挟むことができます:

# List to add flags to a line line = [] # Decorator adding a red flag def red_flag(func): def add_flag(): line.append("red") player.speak("Two red flags added to the line") func() line.append("red") return add_flag # Decorator adding a blue flag def blue_flag(func): def add_flag(): line.append("blue") player.speak("Two blue flags added to the line") func() line.append("blue") return add_flag # Decorated Function adding line and middle flag @blue_flag @red_flag def middle_green(): line.append("green") player.speak("A green flag has been added to the line")

上記のコードは、連鎖されたデコレータが付いた関数を示しています。これらのデコレータは関数内に組み込まれており、ラインの端には青い旗が、内側には赤い旗が、そして中央には緑の旗が配置されます。これらはすべて line という名前のリストに追加され、これがライン上に旗を設置する方法となります。

まず、ゴールドの X マークまで歩き、read() 関数を使用して案内板に記された指示を確認してください。ここでは、どこにどの旗を設置すべきかが示されており、"red""green""blue" の 3 種類の色付き旗が存在します。各ラインには、中央に 1 つ、内側に 2 つ、外側に 2 つの旗が配置され、合計で 5 つの旗が設置されます。これは、マップの左下にある既成のラインと同様です。

ライトの X マークまで歩き、collect() 関数を使用してクレート内の "flags" を取得してください。その後、ダークの X マークまで歩き、左から右へ、先ほど読んだ指示に従って旗を順番に配置します。このために中央の関数を使用します。例えば、middle_green() は以下のような旗のラインを生成します: ["blue", "red", "green" ,"red","blue" ] 。そして line リストを使ってラインを設置するために place() 関数を使用します: place(line) .

各 X マークの間に clear() 関数を使用して line リストをクリアしてください。例えば、line.clear() のようにします。これにより、各ラインごとに新しいリストを作成することなく、同じリストを再利用できます。右端の最後の X マークではカスタム関数が必要です:

@ @ def middle_custom(): line.append( Insert append ) player.speak("%s flag has been added to the line" % ( insert flag ))

関数にデコレータを追加するために、二つの @ 記号を用いてください。その後、line.append と文字列内の旗の色を記入します。これを案内板の指示に従って行い、レベルをクリアしてください。

コードブック