標準ライブラリ探訪
このレッスンでできるようになること。random と statistics を読み込んで、テスト用の支出データを自動で作り、その中身を検査できるようになります。
道具は探して見つける
標準ライブラリには200以上のモジュールがあり、全部を覚える必要はありません。大事なのは「やりたいことに合う道具がすでにあるかもしれない」と疑って探す習慣です。今回はその練習として2つ触ります。
randomはランダムな値を作るモジュールです。random.randint(a, b)は a 以上 b 以下の整数を1つ返しますstatisticsは平均や中央値を出すモジュールです。statistics.mean(xs)が平均、statistics.median(xs)が中央値です
import random
import statistics
amounts = [random.randint(100, 5000) for _ in range(5)]
print(len(amounts))
print(statistics.mean(amounts))ランダムな値は検査の仕方が変わる
家計簿の集計処理を試すには、それらしいデータが何十件も要ります。手で書くのは大変なので random で作ります。ただしランダムな値は実行するたびに変わるため、値そのものを正解と比べることができません。
そこで、値ではなく性質を確かめます。件数がちょうど指定どおりか、すべての金額が指定した範囲に収まっているか、平均がその範囲の中にあるか。こうした真偽の判定なら、何度実行しても同じ答えになります。ランダムを扱うコードのテストは、この「性質で確かめる」やり方が基本になります。
all で全件をまとめて調べる
all(条件 for x in xs) は、すべての要素が条件を満たすとき True を返します。1件でも外れていれば False です。全件チェックを1行で書ける便利な書き方で、第4章でもう一度詳しく扱います。
要件
- random.randint(100, 5000) で金額をつくること
- statistics.mean で平均を求めること
- 戻り値は [件数, 全件が100以上5000以下か, 平均が100以上5000以下か] の3要素リストにすること
入出力例
generate_check(10) → [10,true,true]
generate_check(3) → [3,true,true]
generate_check(50) → [50,true,true]ヒント
編集 LuaGate編集部