1. test 1
  2. test 2
  3. test 3
  4. test 4
コース一覧
Python道場 商店街ポイントカードの10問
台帳を保存・復元せよ

Python道場 商店街ポイントカードの10問

Python入門で身に付けた技を、商店街ポイントカード事務局の仕事で試す演習専用コースです。解説はありません。依頼と完成条件だけを読み、白紙から自分で組み立てます。手が止まったときのために、方針・使う構文・部分解の3段階のヒントを各問に用意しています。表示の整形から始まり、条件分岐、ループ、関数、辞書での集計、文字列の掃除、ファイル保存を経て、最後は全機能を束ねた台帳アプリまで、10問で Python の主要な道具を一巡します。1問15分から45分、全10問で約5時間です。Python入門を終えて「読めるけれど自分では書けない」と感じている方に向いています。

1
初段
01. 会員証を表示せよ15分
02. ポイント付与計算15分
03. 会員ランク判定20分
04. ポイントBuzz20分
2
中段
01. 全会員の合計と平均25分
02. 処理を関数に分けよ25分
03. ランク別に集計せよ30分
04. 乱れた台帳を掃除せよ30分
3
師範
01. 台帳を保存・復元せよ35分
02. 総合 ポイント管理台帳45分

台帳を保存・復元せよ

師範 / 目安 35分

松田さんが青い顔で事務局に駆け込んできました。「昨日、商店街が停電してな。パソコンの電源がぱちんと落ちて…あのとき台帳を打ち込んどったら、全部消えとったんじゃないか」。手書きの帳面には無かった不安です。「頼む、ファイルに残して、次に開いたときちゃんと読み込めるようにしてくれんかね」

ここからが師範の段です。プログラムは終われば消えます。消えないのはファイルに書いたものだけです。今回は、会員データをファイルに書き出し、そのファイルを読み直して元の形に戻すところまでを、1つの関数の中で通します。書けただけでは半分で、読み直して元通りになって初めて保存できたと言えます。

完成条件

save_and_load(members) という関数を定義してください。

  • members は {"name": "田中はじめ", "points": 1200} の形の辞書を並べたリストです
  • 中身を ledger.txt というファイルに書き出します。書き込みは上書きモードで開いてください
  • 1行に1会員、名前,ポイント の形にします
  • 書き終えたら同じファイルを開き直して読み込み、members と同じ形の辞書のリストに戻して返します
  • ポイントはファイルから読むと文字列になります。整数に戻してください
  • 空行は読み飛ばします

返す値は、渡したリストと同じ並び・同じ中身でなければいけません。

進め方

白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。

開かずに10分粘って進まないなら、①だけ開けてください。粘る時間そのものには価値がありません。価値があるのは、自分で書いた行が動いた瞬間です。

書き込みを追記モードにすると、呼ばれるたびに行が積み上がって、2回目から答えが合わなくなります。毎回まっさらから書き直すモードを選んでください。

要件

  1. save_and_load(members) を定義する。members は {"name": ..., "points": ...} の辞書のリスト
  2. ledger.txt を上書きモードで開き、1行に1会員を「名前,ポイント」の形で書く
  3. 書き終えたら同じファイルを開き直して読み込む
  4. 読んだ行を分解し、ポイントを int に戻して辞書に組み立てる
  5. 空行は読み飛ばす
  6. 復元したリストを return する。並びも中身も元と同じにする

入出力例

save_and_load([{"name":"田中はじめ","points":1200},{"name":"佐藤みどり","points":480}]) → [{"name":"田中はじめ","points":1200},{"name":"佐藤みどり","points":480}] save_and_load([{"name":"鈴木たけし","points":0}]) → [{"name":"鈴木たけし","points":0}] save_and_load([{"name":"松田さだお","points":999},{"name":"山口あゆみ","points":1000},{"name":"中村けいた","points":500},{"name":"小林ひかる","points":3200}]) → [{"name":"松田さだお","points":999},{"name":"山口あゆみ","points":1000},{"name":"中村けいた","points":500},{"name":"小林ひかる","points":3200}] save_and_load([]) → []

ヒント

前のヒントを開くと次が開きます。開かずに解けると未開封クリアです

①方針 書く処理と読む処理を、1つの関数の中に順番に並べます。書き終えてから読み始めるので、with のブロックは2つに分けます

ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/09

関連レッスン

  • 総合 ポイント管理台帳

    登録・付与・集計・保存を1つにまとめます。10問で作った道具を全部使います。

main.py
学習モード
エディタを読み込んでいます

メモ

台帳を保存・復元せよ

⌘S で保存