今回のテーマ
これまでの学習で、
- 件数(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 にして返すと扱いやすい
- 「処理」と「表示」を分けるとコードが強くなる
少しの工夫で、
読みやすさと再利用性が大きく変わると実感しました。
次のステップ
- エラー処理(空リスト対策)
- ログレベルを文字列で切り替える
- 表示フォーマットを関数化する


コメント