上級Python開発コース
チャプター
>
レベル
数学モジュール
数学モジュール入門
目的
農場の土地所有権証と境界線を確認し、Mathモジュールの関数を使用して数値を検証・計算します。
本館の端のオフィスには、建物と土地所有権証の古い設計図のアーカイブがあります。農場を東方に拡大する計画がありますが、建設計画を検討する前にすべての書類を整理することが重要です。これは python の math モジュールを使用して実行します。
import math
これまでの statistics モジュールと同様に、math モジュールにも Python の組み込みライブラリを拡張するために使用できる数学関数がいくつか揃っています:
-
math.isnan(): 入力された値が数値でないかどうかをチェックします -
math.isinf(): 入力された値が無限大であるかどうかをチェックします -
math.isfinite(): 入力された値が有限であるかどうかをチェックします -
math.prod(): 渡されたすべての引数を掛け合わせます -
math.pow(): 二つの引数を取り、第一引数の値を第二引数の累乗した結果を返します。 -
math.trunc(): 与えられた引数の小数部分を除去し、浮動小数点数から整数に変換します。(四捨五入せず、ただ切り捨てます) -
math.copysign(): 二つの引数を取り、第二引数の符号 (-,+) を第一引数に適用します。 -
math.factorial(): 一つの引数を取り、その数値から 1 までの連続した掛け算の結果を返します。例えば、値が5の場合は5x4x3x2x1と計算され、その結果を返します。
これらの関数を使用して、開発プロジェクトの準備のためにいくつかのデータを確認し、記録します。農場の設計図を格納した3つのリスト定数 red_schematics、green_schematics、blue_schematics があります。これらの設計図には、数値として利用できない値が記録されているため、math 関数を使用して適切な要素を特定し、使用可能なデータを見つけ出して記録します。
まず、赤いカーペット上の暗い X 印に向かい、red_schematics リスト定数の要素をループで巡回して使用可能な要素を特定します。
for x in red_schematics: y = math.isnan (float(x)) if y == True: player.speak("Not a Number") else: y = math.isinf(float(x)) if y == True: player.speak("Is infinite") else: player.speak(x)
このループはリスト内のすべての要素を順に巡回し、math.isnan() 関数が数値でない項目を識別し、math.isinf() がデータ収集に利用できない無限大の値を識別します。新しいリスト red_values を作成し、リスト内包表記を使用して math.isfinite() によるフィルタリングで不要な要素を除外します。例えば、red_values = [x for x in red_schematics if math.isfinite(float(x))] のようにします。
さらに、math.prod() 関数を使用してリスト内のすべての項目を掛け合わせ、合算します。例えば、red_values = math.prod(red_values) のようにします。
同じフィルタリング処理を、緑と青のカーペット上の暗い X 印に対しても実施し、green_schematics、blue_schematics のリスト定数を使用して、green_values と blue_values というリストに要素をまとめます。
黄金の X 印に向かい、机の前に立って、エディタに予め用意されている write() 関数を使用し、使用可能な設計図データを記録します。
すべてをまとめたら、明るい X 印に向かい、open() 関数を使用して次の部屋に入ります。
次の部屋に入ると、いくつかの机に土地所有権証と座標が置かれています。橋を渡った先の新たに追加された農場を調査する前に、いくらかのデータを記録するのが望ましいです。最初の机のそばにある地図が入ったクレートの前にある明るい X 印に向かい、read() 関数を使って土地所有権証のインデックスデータを取得します。
紫のカーペット上の暗い X 印に向かい、purple_data という変数を作成し、取得したデータを用いて座標情報を得るために math.pow() 関数でデータに 3 乗を計算します。例えば、purple_data = math.pow( -index data- , 3 ) のように、事前に取得したインデックスデータを必ず使用してください。次に、math.trunc() を使用して変数から小数部分を取り除きます。例えば、purple_data = math.trunc(purple_data) のようにします。完了したら、その X 印の場所で、エディタに予め用意されている write() 関数を使用し、変数に保存されたデータを記録します。
最後に、最上部の机の隣にあるファイリングキャビネットの前の明るい X 印に向かいます。再度 read() 関数を使用してインデックスデータを取得します。このデータは、土地のさらなる座標情報を明らかにするために展開する必要があります。ファイルから見つかったデータ値を格納する変数 white_data と、ファイルから見つかった符号の値を格納する変数 sign を作成します。白いカーペット上の暗い X 印に向かい、作成した二つの変数を引数として使用して math.copysign() 関数を呼び出し、その値を white_data に代入します。例えば、white_data = math.copysign(white_data,sign) のようにします。
完了したら、white_data を使用して math.factorial() 関数で乗算を行うため、white_data を整数に変換して関数に渡します。例えば、white_data = math.factorial(int(white_data)) のようにします。その後、エディタに予め用意されている write() 関数を使用し、white_data を記録することでレベルを完了させます。