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

デコレーター
デコレーターの最適化

目的

デコレーターを使って具材を集め、さまざまな種類のピザを作ります。

オーブンの設置が完了したので、後で調理できるようにピザを用意する時間です。デコレーターの使い方がわかったので、それらを少し最適化する方法について学びます。コード内で @ 記号に続けてデコレーターの名前を書き、そのコードをデコレートされる関数の上に置くことで、変数を使用せずに自動的にデコレーターを適用することができます。例えば:

# Decorator def create_pizza(func): def set(): pizza = ["dough","red sauce","cheese"] player.combine(pizza) func() return set # Function being decorated with @ @create_pizza def peperoni_pizza(): player.place("Peperoni") player.speak("Peperoni Pizza has been prepped") # Using pre-decorated function peperoni_pizza()

この手法は、使用前に関数があらかじめデコレーションされるためプロセスが簡素化される一方で、柔軟性を高めるためにデコレーターを変数に割り当てたい場合もあることに留意してください。

まず、金色の X マークに向かって歩き、ピザを作るための具材を集めましょう。ピザ作りの具材は、"cheese"、"dough"、"red sauce"、"peperoni"、"ham"、"olive"、"pepper"、"onion"、および "pineapple" です。これらの具材の多くは、食料庫の棚を表すマトリックスの中に配置されています。リスト内包表記を使用して、取り出したいアイテムすべてをリストに格納してください。

shelves = [ ["cheese", "dough", "jar"], ["jar", "red sauce", "jar"], ["peperoni", "jar" , "ham"], ["olive", "pepper", "onions"] ] ingredients = [ item for row in shelves for item in row if not "jar" in item]

上記のコードでは、リスト ingredientsshelves という名前のマトリックスの各行を巡回し、"jar" を含むアイテムをすべて除外しています。このリスト内包表記により、すべてを手動で追加する手間を省くことができます。使用する具材を確認するために、speak() 関数を使ってください。

すべての具材が集まったら、"pineapple" を除いて、ピザを作る各関数にはその機能を完成させるために place() 関数が追加される必要があります。これらの関数はコードエディターに設定されており、名前は、peperoni_pizza() (必要な具材: "peperoni")、vegetable_pizza() (必要な具材: "olive", "pepper", "onion")、および pineapple_pizza() (必要な具材: "ham" と "pineapple")です。

暗い X マークの場所へ移動し、デコレーター付きの関数を使ってピザを用意してください。赤いカーペットの X マークでは peperoni_pizza() を、緑のカーペットでは vegetable_pizza() を、黄色のカーペットでは pineapple_pizza() を作成します。黄色いカーペットに向かう途中、明るい X マークに立ち寄り、キャビネットの方を向いて collect() 関数を使い "pineapple" を取ってください。すべてのピザを準備し、このレベルを無事にクリアしましょう。

コードブック