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分

乱れた台帳を掃除せよ

中段 / 目安 30分

松田さんが眉間にしわを寄せて紙束を差し出してきました。「アルバイトの子が入力した台帳、空白やら『pt』やら混ざっとって…綺麗にしてくれ」。中を見ると " 120pt"、"300 "、"abc" といった調子です。

人が入力した文字列は必ず乱れます。乱れを前提にして、直せるものは直し、直せないものは黙って捨てずに数えて報告する。ここが事務の仕事です。

完成条件

乱れた文字列のリストを受け取り、掃除した結果を返す関数 clean_ledger(rows) を作ってください。

返す値は要素が2つのリストで、次の形にします。

  • 1つ目は数値に直せた値を元の並び順のまま並べた整数のリストです
  • 2つ目は数値に直せなかった件数の整数です

掃除の規則は次のとおりです。

  • 前後の空白は取り除きます
  • 末尾や途中に付いた pt は取り除きます。大文字の PT は今回は考えなくてかまいません
  • 残った文字がすべて数字なら整数に直します
  • 数字にならないものは結果のリストに入れず、件数のほうに1つ数えます。空文字も数字にならないものとして扱います

たとえば [" 120pt", "300 ", "abc"] を渡すと [[120, 300], 1] が返ります。

進め方

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

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

掃除と判定を1行に詰め込もうとすると、どこで失敗したか分からなくなります。まず整える、次に数字かどうかを見る、最後に振り分ける。3段階に分けて書いてください。

int() にいきなり渡す書き方でも通せますが、その場合は失敗したときの受け止め方を自分で用意することになります。どちらの道を選んでもかまいません。

要件

  1. clean_ledger(rows) は要素が2つのリストを返すこと
  2. 1つ目の要素は数値に直せた値を元の並び順で並べた整数のリストであること
  3. 2つ目の要素は数値に直せなかった件数の整数であること
  4. 前後の空白と pt を取り除いてから判定すること
  5. 数字にならないものと空文字は、リストに入れず件数に数えること

入出力例

clean_ledger([" 120pt","300 ","abc"]) → [[120,300],1] clean_ledger([" 980pt ","pt","","1500"," ","45pt"]) → [[980,1500,45],3] clean_ledger(["abc","---"]) → [[],2] clean_ledger([]) → [[],0]

ヒント

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

①方針 1件ずつ取り出し、整える処理と、数字かどうかを見る処理を分けます。結果を入れるリストと、失敗を数える変数を先に用意しておきます

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

関連レッスン

  • 台帳を保存・復元せよ

    会員データをファイルに書き出し、読み直して元の形に戻します。往復して初めて正解です。

  • ランク別に集計せよ

    会員のリストをランクごとに数え、辞書にまとめます。前の問題で作った関数を再利用します。

  • 処理を関数に分けよ

    付与計算とランク判定を、2つの関数という道具にまとめます。

  • 全会員の合計と平均

    ポイントのリストを走査して合計と平均を出します。平均は小数1桁に整えます。

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

メモ

乱れた台帳を掃除せよ

⌘S で保存