コース一覧
    Python演算子・制御フロー
    つくる:カテゴリ自動判定

    Python演算子・制御フロー

    演算子と条件分岐の使い方を学び、値の比較と分岐を組み合わせた処理を実装できるようにします。

    1
    演算子と式
    01. 比較演算子15分
    02. 論理演算子15分
    03. in演算子15分
    04. 剰余と切り捨て除算15分
    05. 連鎖比較と優先順位15分
    06. 三項演算子15分
    07. つくる:予算チェック15分
    08. 第3章クイズ10分
    2
    条件分岐
    01. if文の基本15分
    02. if / elif / else15分
    03. 条件の組み合わせ15分
    04. match文15分
    05. 定番:FizzBuzz判定15分
    06. デフォルト値とor15分
    07. つくる:カテゴリ自動判定15分
    08. 第4章クイズ10分

    つくる:カテゴリ自動判定

    カテゴリを毎回自分で選ぶのが面倒になる

    第 3 章までのおこづかい帳は、言われたことをそのまま整形するだけの道具でした。条件分岐を手に入れたので、ここで一歩進めます。品名を渡すだけでカテゴリを推測する 関数を作ります。

    これがあると、記録するたびに「これは食費、これは娯楽」と人間が選ぶ手間がなくなります。作り自体は単純で、品名に決まった言葉が含まれているかを in で調べ、当たったグループのカテゴリ名を返すだけです。

    Python

    def guess_payment(memo):
        if "カード" in memo or "クレカ" in memo:
            return "カード"
        return "現金"

    支払い方法を推測する関数です。"カード" in memo は完全一致の == より当てはまる範囲が広く、カードで支払い のような実際の入力にも当たります。候補が増えたら or でつなぎ、グループが増えたら elif で分けます。

    どこにも当てはまらなかった行き先を先に決める

    上の例の return "現金" は if の外側にあります。どの候補にも当たらなかった記録が、最後にここへ落ちてきます。

    この受け皿を忘れて elif だけで終えると、当てはまらない品名を渡したときに return に届かず None が返ります。エラーが出ないので、しばらく気づけません。分岐を書いたら、必ず最後の受け皿を確かめます。

    判定の材料は、コードを書き始める前に文章で書き出しておきます。どのグループにどの言葉を入れるかが曖昧なままだと、どこまで書けば完成なのか自分でも分からなくなります。

    解説

    どの分岐にも入らなかったときの行き先を先に決めておく。これだけで None が返る事故は起きなくなります。

    バスタオルは交通費になる

    部分一致には弱点があります。バスタオル は日用品ですが バス を含むので、交通費と判定されてしまいます。映画のチケット を娯楽と当てられるのと同じ仕組みが、そのまま誤判定の原因になります。

    キーワードの当て方を工夫するか、品名とカテゴリの対応表を持てば改善できます。いま持っている道具で作れる範囲では、この形がいちばん実用的です。限界を知ったうえで使う のと、知らずに使うのとでは大違いです。

    in は左が探すもの、右が探される場所です。左右を逆に書くと意味が反転するので、そこだけ確かめてください。

    やってみよう

    関数 guess_category(name) を実装してください。品名に下記の言葉が含まれていたら、そのカテゴリ名を返します。

    • 食費 — りんご / パン / 牛乳
    • 日用品 — ティッシュ / 洗剤 / 歯ブラシ
    • 娯楽 — 映画 / ゲーム / マンガ
    • 交通費 — 電車 / バス / タクシー

    どれも含まれないときは "その他" です。判定は == の完全一致ではなく in の部分一致で行います。書けたら りんご 洗剤 映画のチケット 電車代 ノート の 5 つを渡して、5 種類の答えがすべて出ることを確かめてみてください。

    要件

    1. 関数名は guess_category で、引数は name の 1 つ
    2. name に りんご / パン / 牛乳 のいずれかが含まれるなら "食費" を return する
    3. name に ティッシュ / 洗剤 / 歯ブラシ のいずれかが含まれるなら "日用品" を return する
    4. name に 映画 / ゲーム / マンガ のいずれかが含まれるなら "娯楽" を return する
    5. name に 電車 / バス / タクシー のいずれかが含まれるなら "交通費" を return する
    6. 上のどれにも当てはまらないときは "その他" を return する
    7. 判定は == の完全一致ではなく in の部分一致で行う

    ヒント

    "りんご" in name のように、左に探すキーワード、右に品名を書きます

    同じカテゴリの候補は or でつなぎます。条件ごとに in を書く必要があります

    カテゴリは食費 / 日用品 / 娯楽 / 交通費 の順に elif で並べます

    最後の return "その他" は elif の外側に置きます。ここが受け皿になります

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

    関連レッスン

    • 第4章クイズ

      if / elif / else の評価順、match、条件の組み合わせ、or による既定値を5問で確認する

    • デフォルト値とor

      未入力のカテゴリを既定値で埋めながら、空っぽの値が False 扱いになる性質と or の働きを学ぶ

    • 定番:FizzBuzz判定

      FizzBuzz を 1 つの数について判定しながら、厳しい条件を先に書くという分岐の鉄則を学ぶ

    • match文

      1 つの値を複数の候補と突き合わせる match 文の書き方と、elif との使い分けを学ぶ

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 関数処理に名前を付けて再利用できる単位
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • 引数位置引数=順番で渡す。
    main.py
    エディタを読み込んでいます

    メモ

    つくる:カテゴリ自動判定

    ⌘S で保存