🟦Python学習記録 #21|集計処理を関数にまとめてログ出力をシンプルにする

Code

今回のテーマ

これまでの学習で、

  • 件数(count)
  • 合計(sum)
  • 平均(avg)
  • 判定(OK / WARN / ERROR)

といった処理を、
毎回バラバラに書いていました。

今回はそれを一歩整理して、

👉 「集計処理を関数にまとめる」
👉 「結果を dict にして返す」

という形で、
コードと表示をシンプルにする練習をしました。


まずは完成形のコード

def calc_stats(numbers, warn_threshold=50, ok_threshold=70):
    count = len(numbers)
    total = sum(numbers)
    avg = total / count

    if avg >= ok_threshold:
        level = 'OK'
    elif avg >= warn_threshold:
        level = 'WARN'
    else:
        level = 'ERROR'

    return {
        'count': count,
        'sum': total,
        'avg': avg,
        'level': level,
        'warn_threshold': warn_threshold,
        'ok_threshold': ok_threshold,
    }


numbers = [35, 7, 26, 59, 55, 73, 90, 24, 13, 28,
           20, 71, 8, 89, 81, 97, 39, 66, 42, 57]

stats = calc_stats(numbers)

print(
    f"[{stats['level']}] "
    f"count={stats['count']} "
    f"sum={stats['sum']} "
    f"avg={stats['avg']:.2f}"
)

実行結果

[WARN] count=20 sum=980 avg=49.00

今回のポイント(超重要)

① 処理と表示を分けた

  • calc_stats()
    • 計算だけを担当
  • print()
    • 表示だけを担当

👉 後から表示形式を変えても、
計算ロジックを触らずに済みます。


② 結果を dict にまとめると見やすい

{
  'count': 20,
  'sum': 980,
  'avg': 49.0,
  'level': 'WARN'
}
  • 値に名前がつく
  • 添字ではなく意味でアクセスできる
  • ログ出力・拡張が楽

③ threshold を引数にすると使い回せる

calc_stats(numbers, warn_threshold=40, ok_threshold=60)

👉 基準を変えたいときも
関数を直さずに対応できる


今日のまとめ

  • 集計処理は 関数にまとめるとスッキリ
  • 結果は dict にして返すと扱いやすい
  • 「処理」と「表示」を分けるとコードが強くなる

少しの工夫で、
読みやすさと再利用性が大きく変わると実感しました。


次のステップ

  • エラー処理(空リスト対策)
  • ログレベルを文字列で切り替える
  • 表示フォーマットを関数化する

コメント

タイトルとURLをコピーしました