コース一覧
    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分

    条件の組み合わせ

    入れ子の if を1行にまとめる

    材料が 2 つになると、1 本の条件では足りない

    ここまでの分岐は、見ていた材料が 1 つだけでした。ところが実際には「土日で、しかも 3000 円以上」のように、2 つの条件が同時に成り立つかを見たい場面が出てきます。

    書き方は 2 通りあります。if の中にもう 1 つ if を入れる ネスト と、and で 1 つの条件にまとめるやり方です。

    Python

    mark = "確認不要"
    if category == "娯楽":
        if price >= 5000:
            mark = "要確認"
        else:
            mark = "記録のみ"
    print(mark)

    外側で分野を、内側で金額を見ています。内側に入るのは外側が True だったときだけです。インデントは外側の if の中身で 4 つ分、内側の if の中身でさらに 4 つ分と、1 段ずつ深くなります。

    同じ条件を 2 回書きそうになったら、ネストにする

    同じことを and で平らにも書けます。

    Python

    mark = "確認不要"
    if category == "娯楽" and price >= 5000:
        mark = "要確認"
    elif category == "娯楽":
        mark = "記録のみ"

    通る道はまったく同じで、結果も 1 文字も変わりません。違うのは category == "娯楽" を 2 回書いている点です。

    目安は下記のとおりです。外側の条件の中で処理が複数に分かれるならネスト、そろったときの処理が 1 つだけなら and が素直です。迷ったら「同じ条件を 2 回書いていないか」を見ます。書いていたら、ネストのほうが構造をそのまま写せます。

    判定そのものが長いときは、is_target = category == "娯楽" のように条件へ名前を付けて変数に入れる手もあります。この一手で読みやすさが変わります。

    == は省略できない

    2 つの候補のどちらかを見たいとき、category == "食費" or "娯楽" と書くのは間違いです。Python はこれを (category == "食費") or ("娯楽") と読みます。"娯楽" は空でない文字列なので常に True 扱いになり、どんな値を渡しても条件が成り立ってしまいます。

    エラーが出ないので気づきにくく、「何を渡しても同じ答えになる」という形で表に出ます。or でつなぐのは値ではなく 条件そのもの です。左右それぞれに == を書きます。

    やってみよう

    関数 weekend_alert(day, price) を実装してください。day は "月" から "日" までの曜日 1 文字です。

    day が "土" か "日" で、かつ price が 3000 以上なら "週末の使いすぎ" を返します。週末だが 3000 未満なら "週末の支出"、週末でなければ金額に関係なく "平日の支出" を返します。

    ネストと and の両方で書いてみて、自分にはどちらが読みやすいか確かめてみてください。

    要件

    1. 関数名は weekend_alert で、引数は day と price の 2 つ
    2. day が "土" または "日" かつ price が 3000 以上なら "週末の使いすぎ" を return する
    3. 週末だが price が 3000 未満なら "週末の支出" を return する
    4. day が "土" と "日" のどちらでもなければ、金額に関係なく "平日の支出" を return する

    ヒント

    週末の判定は day == "土" or day == "日" です。day == "土" or "日" とは書けません

    if の中にもう 1 つ if を書くネスト、または and でつなぐ書き方のどちらでも構いません

    3000 ちょうどは「使いすぎ」側なので >= を使います

    ネストで書く場合、内側の if の中身は半角スペース 12 個分のインデントになります

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

    関連レッスン

    • match文

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

    • 定番:FizzBuzz判定

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

    • デフォルト値とor

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

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

      第4章の総仕上げ。品名に含まれるキーワードからカテゴリを推測する guess_category を作る

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

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

    • インデントPythonはインデント(通常スペース4つ)でコードブロックを定義する。
    • 処理計算や代入を表す長方形
    • 変数データに名前をつけて参照する仕組み
    • 関数処理に名前を付けて再利用できる単位
    • 引数位置引数=順番で渡す。
    main.py
    エディタを読み込んでいます

    メモ

    条件の組み合わせ

    ⌘S で保存