上級Python開発コース
チャプター
>
レベル
高度なクラス
演算子のオーバーロード
目標
ベクトルと演算子オーバーローディングを使用して、どれほどのワインが澄まされているかを集計します。
ワインが圧搾された後、ろ過と精製が必要です。いくつかの樽がろ過され、その全量が洗浄されなければなりません。樽が密封され熟成できるように、生成されるワインの量を集計することが重要です。
これを行うためには、ベクトルを作成して、それらを加算する必要があります。ベクトルはリストに似ていますが、柔軟性は低いものの、よりメモリ効率が良いです。通常は座標の扱いに使用されますが、ここでは複数の値を保持する変数のように扱います。ベクトルの加算は、通常の値に対して行うように演算子を利用できるように、クラスオブジェクトの機能を拡張する Operator Overloading を使用して行います。
まず最初に、部屋の上部にある金属製の水缶を歩いて収集してください。これらは樽でろ過されるワインを洗浄するのに役立ちます。収集が完了したら、赤いカーペット上の暗いXマークの元へ歩いて移動し、樽に向かって、各樽の内容物をベクトル化し始めてください。
Xマークは各色のカーペットごとに、金色のXマーク、淡いXマーク、暗いXマークの3つ一組で配置されています。暗いXマークと淡いXマークでは、樽を洗浄するために water() 関数を使用してください。また、暗いXマークと淡いXマークではその樽の列で処理されているワインの量を識別するために read() 関数を使用してください。金色のXマークでは、量を合計するために write() 関数を使用して、合計を記録します。
コードエディタには vector というクラスがあります。これはベクトルの生成だけでなく、ベクトルを加算するためにも使用されます。淡いXマークと暗いXマークで識別されたデータを格納するための vector オブジェクトを作成してください。例えば、red カーペットでは赤ワインがろ過されています:
# Create object using data from dark X mark red_wine_dark = vector(345, 272) # Create object using data from light X mark red_wine_light = vector(248, 432) # Add together vectors for totals red_wine_total = red_wine_dark + red_wine_light
ベクトルにおいて、最初の位置は x と呼ばれ、2番目の位置は y と呼ばれます。式は次のようになります: object_name = vector(x,y) 。これは、read() 関数から取得した情報でベクトルを埋めるために関連します。
金色のXマークでは、各セットのベクトルの合計を書き留めるために write() 関数を使用します。例えば、赤いカーペットのXマークの場合、次のように記述されます:
await player.write( "There is a total of %s pounds on the left barrels and %s pounds on the right barrels" % (red_wine_total.x, red_wine_total.y)
各ベクトルの値を識別するために、合計の最後に .x と .y を追加することを忘れないでください。
色ごとに異なるタイプのワインがろ過されています。先に述べた red カーペットでは red_wine がろ過され、yellow カーペットでは sparkling_wine、green カーペットでは white_wine、そして orange カーペットでは orange_wine がろ過されています。
すべての淡いXマークと暗いXマークが water() 関数で洗浄され、金色のXマークのすべてのサインに合計が記録されると、レベルを完了したことになります。