上級Python開発コース
チャプター
>
レベル
ジェネレータ
ジェネレーターへのデータ送信
目的
データをジェネレーターに送信して、スピンドルを使って羊毛を集め、糸に紡ぎましょう。
一部の羊が少し毛深くなってきたので、毛を刈って羊毛を集めるのが良いでしょう。その後、糸を作るためにスピンドルを通すことができます。これを達成するためには、紡いだ糸と羊毛の量が大きく変動する可能性があるため、ジェネレーターを使用する必要があります。
まず、spin() という名前の糸を紡ぐことができるジェネレーターを定義します。このジェネレーターは動作するために外部入力を使用するようにセットアップする必要があります。yieldからデータを読み取り、変数に格納し、その内容を各サイクルごとに長さを増やすことで修正し、最終的に結果を生成します。
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
これはジェネレーターなので、内部のwhile()文を一時停止して修正し、望む出力を生成することができます。この制御レベルがジェネレーターの核心であり、データを処理するときに役立ちます。ジェネレーターにデータを挿入するには、ジェネレーターを定義し、send()関数を使用して任意のデータを送り込むことができます。例えば:
spindle = spin() # ジェネレーターのインスタンスを作成する next(spindle) # ジェネレーターをシングルステップ実行する spindle.send(6) # ジェネレーターにデータを挿入する # この場合、数字の6を送信します
色付きのカーペットのXマークの場所に歩いて行き、羊に向かいましょう。sheepという名前のディクショナリー定数があり、各羊の羊毛をどのくらい刈るかの値を保持しています。speak()関数を使ってディクショナリーとあなたが立っているカーペットの色を使い、羊の羊毛を刈って、どれだけ集めたか確認してください。例えば:player.speak(sheep["green"])。
全部で4つの色付きカーペットがあります:"green" 、"red" 、"blue" 、および"orange"。羊を刈ったら、各色付きカーペットのスピンドルがある暗いXマークの場所に行きます。それぞれの色から剪定した羊毛のポンド数をジェネレーターに入力するために send() を使用します。
例えば、"green" のカーペットで羊を刈る場合、4 ポンドの羊毛を刈る場合、そのデータをスピンドルに送信します。次のように行います:
next(spindle) spindle.send( 4)
この操作をすべての4つの色付きカーペット上の暗いXマークで行い、レベルを完了します。