閉じる

【Python】if文の使い方:条件分岐・比較演算子・ネストを一気に理解

Pythonの学習を始めると、最初の大きな壁になりやすいのがif文です。

if文は条件によって処理を切り替える仕組みであり、Pythonに限らずあらゆるプログラミングの土台になります。

本記事では、Pythonのif文の基本から、比較演算子や論理演算子、ネスト(入れ子)したif文の書き方、さらに読みやすくするコツまで、順を追って丁寧に解説していきます。

Pythonのif文とは

if文でできること

if文は「条件によって処理を変える」ための構文です

具体的には、ある条件がTrue(真)のときだけ特定の処理を実行したり、条件に応じて複数のパターンから実行する処理を選んだりできます。

if文によって、次のような処理が書けます。

文章で整理すると、次のような場面で活躍します。

  • 入力された年齢が20歳以上なら「成人」と表示する
  • 点数によって「合格」「不合格」を切り替えて表示する
  • ログインしているユーザーかどうかで表示する画面を変える
  • ファイルが存在する場合だけ読み込む

プログラムに「判断力」を与えるのがif文だとイメージすると理解しやすくなります。

if文の基本構文と書き方

Pythonのif文の基本構文は、とてもシンプルです。

Python
# 基本的なif文の構文

if 条件式:
    # 条件式がTrueのときに実行される処理
    処理1
    処理2

実際のコード例を見てみます。

Python
age = 20  # 年齢を表す変数

# ageが18以上ならメッセージを表示する
if age >= 18:
    print("18歳以上です")
    print("大人として扱われます")

このプログラムでは、変数ageが18以上の場合にだけ、2行のprintが実行されます。

条件を満たさない場合は、ifの中の処理は1行も実行されません。

Pythonではif文の最後に必ず:(コロン)が必要です。

コロンを書き忘れると文法エラーになりますので注意してください。

インデント(字下げ)のルールと注意点

Pythonではインデント(行頭のスペース)が非常に重要です。

インデントの深さによって「どこからどこまでがifに属する処理か」が決まるからです。

一般的には、次のようなルールに従って書きます。

  • if文の行の末尾に:を書く
  • if文の中に書く行は、半角スペース4つ分インデントする
  • 同じif文の中の行は、インデント幅をそろえる
  • タブとスペースを混ぜない(スペースに統一する)

具体例で確認します。

Python
score = 80

if score >= 70:
    print("合格です")          # ← ifの中の処理1行目(インデントあり)
    print("おめでとうございます")  # ← ifの中の処理2行目(インデントあり)

print("プログラム終了")        # ← ifの外(インデントなし)

上のコードで、2つのprintはインデントがそろっているため、どちらもif文の中に含まれます。

3つ目のprintはインデントがないので、if文の外にあります。

Pythonではインデントのずれは即エラーの原因になります。

テキストエディタやIDEの設定を「タブを入力したらスペース4つに変換」するようにしておくと、トラブルを減らせます。

if文の条件式と比較演算子

比較演算子(==, !=, >, <, >=, <=)の使い方

if文のカギになるのが条件式です。

条件式には「比較演算子」を使って、値を比べた結果をTrueまたはFalseにします。

主な比較演算子は次のとおりです。

演算子意味説明
==等しいx == 10xが10と等しければTrue
!=等しくないx != 0xが0でなければTrue
>より大きいx > 5xが5より大きければTrue
<より小さいx < 100xが100より小さければTrue
>=以上x >= 18xが18以上ならTrue
<=以下x <= 60xが60以下ならTrue

Pythonでは「等号」は=ではなく==で書く点が重要です。

=は「代入」の記号なので、混同に気をつけましょう。

簡単な例を見てみます。

Python
x = 10

if x == 10:  # xが10と等しいかどうかを比較
    print("xは10です")

if x != 5:   # xが5と等しくないかどうかを比較
    print("xは5ではありません")

if x > 7:
    print("xは7より大きいです")

上のコードでは、3つのif文すべての条件がTrueになるので、3行すべてが出力されます。

実行結果
xは10です
xは5ではありません
xは7より大きいです

論理演算子(and, or, not)で条件を組み合わせる

現実の条件は、1つだけでは足りないことが多いです。

例えば「20歳以上かつ65歳未満」や「平日または祝日」など、複数の条件を組み合わせたい場面があります。

こうしたときに使うのが論理演算子です。

演算子読み方意味
andアンド両方の条件がTrueならTrueage >= 18 and age < 65
orオアどちらか一方でもTrueならTrueis_weekend or is_holiday
notノットTrueとFalseを反転して判定するnot is_logged_in

具体的なコードで見てみます。

Python
age = 25
is_student = False

# 20歳以上かつ30歳未満
if age >= 20 and age < 30:
    print("20代です")

# 学生または20歳未満
if is_student or age < 20:
    print("学生または未成年です")
else:
    print("成人の社会人です")
実行結果
20代です
成人の社会人です

論理演算子を使うと条件が長くなりやすいため、丸かっこでグループ化して読みやすくするとよいです。

Python
age = 17
is_member = True

# ()でグループ化して意味をはっきりさせる
if (age < 18 and is_member) or age >= 65:
    print("割引の対象です")

in, not inを使ったメンバーシップ判定

in演算子は、「ある値がリストや文字列などに含まれているか」を調べるための演算子です。

逆にnot inは「含まれていないか」を調べます。

コード例を見てみましょう。

Python
fruits = ["apple", "banana", "orange"]

if "apple" in fruits:
    print("りんごがあります")

if "grape" not in fruits:
    print("ぶどうはありません")

出力は次のとおりです。

実行結果
りんごがあります
ぶどうはありません

文字列に対してもinは使えます。

Python
text = "Hello Python"

if "Python" in text:
    print("Pythonという単語が含まれています")

メンバーシップ判定は、複数の候補をまとめて扱えるので、if文をすっきり書きたいときに便利です。

Python
color = "blue"

# 複数候補をリストでまとめる
if color in ["red", "blue", "green"]:
    print("基本色の1つです")

真偽値(bool)と評価される値の仕組み

if文の条件式は、最終的にTrue(真)False(偽)のどちらかになります。

Pythonでは、この真偽値の型をboolと呼びます。

Python
print(True)
print(False)
print(type(True))   # 型の確認
実行結果
True
False
<class 'bool'>

Pythonのif文では、一部の値は自動的にFalseとして扱われます

代表的なものは次のとおりです。

評価結果
0False
0.0False
空文字列 “”False
空リスト []False
空辞書 {}False
NoneFalse
上記以外True

この性質を利用すると、次のように書けます。

Python
name = ""

# nameが空文字列の場合、ifの条件はFalseになる
if name:
    print("名前が入力されています")
else:
    print("名前が空です")

「空かどうか」を調べるときは、そのままifに渡すと自然でPythonらしい書き方になります。

if文のバリエーション

if、elif、elseの使い分け

条件が2つ以上ある場合は、elifelseを組み合わせるとスマートに書けます。

基本形は次のようになります。

Python
if 条件式1:
    処理1
elif 条件式2:
    処理2
elif 条件式3:
    処理3
else:
    どの条件にも当てはまらない場合の処理

実際の例で確認します。

Python
score = 78

if score >= 90:
    print("評価: S")
elif score >= 80:
    print("評価: A")
elif score >= 70:
    print("評価: B")
elif score >= 60:
    print("評価: C")
else:
    print("評価: D (不合格)")

この場合、scoreは78なのでscore >= 70の部分が最初にTrueとなり、「評価: B」が表示されます。

実行結果
評価: B

if〜elif〜elseは上から順番に判定され、どれか1つがTrueになったら残りはチェックされません

範囲や優先順位の高い条件から順に書くことが大切です。

三項演算子(条件演算子)を使った1行if

Pythonでは、短いif文は1行で書けます

これを一般に「三項演算子」または「条件演算子」と呼びます。

構文は次のとおりです。

Python
結果 = (値1) if 条件式 else (値2)

条件式がTrueなら値1が、Falseなら値2が代入されます。

Python
age = 20

message = "成人" if age >= 20 else "未成年"
print(message)
実行結果
成人

1行ifは便利ですが、条件や処理が複雑な場合は通常のif文の方が読みやすいです。

可読性を優先し、短く書くことだけを目的に使いすぎないようにしましょう。

passを使った何もしないif文

ときどき「条件は書いておきたいが、中身の処理はまだ決めていない」という場面があります。

Pythonではそのようなときにpassを使います。

Python
age = 17

if age < 18:
    # ここには後で処理を書く予定
    pass
else:
    print("成人です")

passは「ここには何も書かない」という意味の文です。

文法上、何か1行必要な場所を空けておくためのダミーと考えるとよいです。

if文だけでなく、関数やクラスの中身が未定のときにも使われます。

例外的な条件分岐(if文以外との違い)の整理

Pythonでは、条件によって処理を切り替える仕組みはif文だけではありません。

代表的なものを整理しておきます。

機能主な用途
if文値に応じた一般的な条件分岐値が範囲内かどうかで処理を変える
try〜except(例外処理)エラーの発生有無で処理を切り替えファイル読み込みの成功・失敗
match文(Python 3.10〜)値のパターンマッチング型や構造に応じた分岐

たとえば、ファイルが存在するかどうかで処理を分けたい場合、単にifで調べるだけでなく、実際には例外処理を組み合わせた方が安全です。

Python
filename = "data.txt"

try:
    with open(filename, "r", encoding="utf-8") as f:
        content = f.read()
        print("ファイルを読み込みました")
except FileNotFoundError:
    print("ファイルが見つかりませんでした")

「値の状態に応じた分岐」はif、「エラー発生時の分岐」はtry〜exceptと、大まかに使い分けると整理しやすくなります。

if文のネストと実践パターン

if文のネスト(入れ子)の書き方と動き

「ある条件が成り立ったときに、さらに細かく条件分岐したい」という場面では、if文の中にif文を書くことができます。

これをネスト(入れ子)と呼びます。

コード例を見てみます。

Python
age = 20
has_ticket = True  # チケットを持っているか

if age >= 18:
    print("年齢条件を満たしています")
    
    if has_ticket:
        print("入場できます")
    else:
        print("チケットがないため入場できません")
else:
    print("年齢が足りないため入場できません")

この例では、age >= 18がTrueの場合にだけ、チケットの有無をチェックする二段目のif文が実行されます。

実行結果
年齢条件を満たしています
入場できます

ネストは便利ですが、インデントが深くなりすぎると読みづらくなるので、次のセクションで改善方法も紹介します。

ネストしたif文を読みやすくするリファクタリング

if文が何重にもネストされると、コードを追いかけるのが難しくなります。

次のような書き方は、初学者だけでなく経験者にとっても読みにくいです。

Python
age = 20
has_ticket = True
is_vip = False

if age >= 18:
    if has_ticket:
        if is_vip:
            print("VIPラウンジにご案内します")
        else:
            print("通常入場できます")
    else:
        print("チケットが必要です")
else:
    print("年齢が足りません")

このような場合、「早期return(早期終了)」や「条件の否定」を使うとネストを浅くできます

方法1: 条件の否定で早く抜ける

Python
age = 20
has_ticket = True
is_vip = False

if age < 18:
    print("年齢が足りません")
elif not has_ticket:
    print("チケットが必要です")
elif is_vip:
    print("VIPラウンジにご案内します")
else:
    print("通常入場できます")

ネストが浅くなり、「条件ごとの分岐」が縦に並んで見やすくなりました。

方法2: 複雑な条件は変数に置き換える

Python
age = 20
has_ticket = True
is_vip = False

is_adult = age >= 18
can_enter = is_adult and has_ticket

if not can_enter:
    print("入場条件を満たしていません")
elif is_vip:
    print("VIPラウンジにご案内します")
else:
    print("通常入場できます")

意味のある名前の変数で条件をまとめることで、if文の意図が明確になります。

複雑な条件分岐を関数に切り出す方法

if文が増えてきたら、関数にまとめることも検討します。

ロジックを関数に切り出すと、テストもしやすく再利用も簡単になります。

次のような長いif文があったとします。

Python
age = 20
has_ticket = True
is_vip = False
is_staff = False

if age >= 18 and has_ticket:
    if is_vip or is_staff:
        print("特別エリアに入場できます")
    else:
        print("一般エリアに入場できます")
else:
    print("入場条件を満たしていません")

これを関数に切り出してみましょう。

Python
def get_entry_message(age, has_ticket, is_vip, is_staff):
    """入場メッセージを返す関数"""
    # 18歳未満、またはチケットなし → 入場不可
    if age < 18 or not has_ticket:
        return "入場条件を満たしていません"
    
    # VIPまたはスタッフ → 特別エリア
    if is_vip or is_staff:
        return "特別エリアに入場できます"
    
    # それ以外 → 一般エリア
    return "一般エリアに入場できます"


# 関数を使う側のコード
age = 20
has_ticket = True
is_vip = False
is_staff = False

message = get_entry_message(age, has_ticket, is_vip, is_staff)
print(message)

実行結果は元と同じです。

実行結果
一般エリアに入場できます

このように、「判断のロジック」と「表示や入出力の処理」を分離すると、プログラム全体の見通しがよくなります。

よくあるif文の書き方のミスと防ぎ方

最後に、Pythonのif文で初心者がよくつまずくポイントと、その防ぎ方をまとめます。

ミス1: 比較と代入の混同(== と =)

===を混同すると、意図しない動作になります。

Python
x = 10

# 誤り例: if x = 10:  # これは構文エラーになる
# 正しくは:
if x == 10:
    print("xは10です")

エラーになるので気づきやすいミスですが、「比較は必ず==」と体で覚えるのが一番の対策です。

ミス2: インデントのずれ

インデントがずれると、意図したブロックから外れてしまいます。

Python
x = 5

if x > 3:
    print("3より大きいです")
print("この行はifの外です")

上の例では2行目だけがifの中で、3行目はifの外です。

エディタの設定で「タブをスペースに変換」「インデントガイド線の表示」を有効にすると、目で確認しやすくなります。

ミス3: 比較にisを使ってしまう

Pythonにはisという演算子がありますが、これは「同じオブジェクトかどうか」を判定するもので、値の等価比較には通常==を使います。

Python
x = 1000

# 一部のケースでは is を使うと正しく判定できない
if x is 1000:  # 推奨されない書き方
    print("1000です")

if x == 1000:  # 正しい書き方
    print("1000です")

値が等しいかどうかを調べるときは==、Noneとの比較にはis Noneというルールで覚えておくとよいです。

Python
value = None

if value is None:
    print("値が設定されていません")

ミス4: 条件が長くなりすぎて意味不明になる

1行に条件を詰め込みすぎると、どのような意味の条件なのか分かりづらくなります。

Python
# 読みにくい例
if (age >= 18 and age < 65 and has_ticket and not is_banned) or is_staff:
    ...

防ぎ方としては次のような工夫があります。

  • 丸かっこでグループ化する
  • 意味のある名前の変数に分解する
  • 関数に切り出す
Python
is_adult = 18 <= age < 65
is_normal_entry = is_adult and has_ticket and not is_banned

if is_normal_entry or is_staff:
    ...

「半年後の自分が読んで理解できるかどうか」を基準に、if文の長さや構造を調整するとよいです。

まとめ

本記事では、Pythonのif文について、基本構文から比較・論理演算子、in演算子、boolの仕組み、if/elif/else、三項演算子、pass、さらにネストしたif文の整理方法まで一気に解説しました。

if文は「条件によって処理を分ける」ための最重要構文であり、ここをしっかり理解すると、プログラムに柔軟な判断ロジックを組み込めるようになります。

まずはシンプルな例から書いて動かし、少しずつ条件を複雑にしていくことで、自然とif文の使い方が身についていきます。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!