Pythonの学習を始めると、最初の大きな壁になりやすいのがif文です。
if文は条件によって処理を切り替える仕組みであり、Pythonに限らずあらゆるプログラミングの土台になります。
本記事では、Pythonのif文の基本から、比較演算子や論理演算子、ネスト(入れ子)したif文の書き方、さらに読みやすくするコツまで、順を追って丁寧に解説していきます。
Pythonのif文とは
if文でできること
if文は「条件によって処理を変える」ための構文です。
具体的には、ある条件がTrue(真)のときだけ特定の処理を実行したり、条件に応じて複数のパターンから実行する処理を選んだりできます。

if文によって、次のような処理が書けます。
文章で整理すると、次のような場面で活躍します。
- 入力された年齢が20歳以上なら「成人」と表示する
- 点数によって「合格」「不合格」を切り替えて表示する
- ログインしているユーザーかどうかで表示する画面を変える
- ファイルが存在する場合だけ読み込む
プログラムに「判断力」を与えるのがif文だとイメージすると理解しやすくなります。
if文の基本構文と書き方
Pythonのif文の基本構文は、とてもシンプルです。
# 基本的なif文の構文
if 条件式:
# 条件式がTrueのときに実行される処理
処理1
処理2
実際のコード例を見てみます。
age = 20 # 年齢を表す変数
# ageが18以上ならメッセージを表示する
if age >= 18:
print("18歳以上です")
print("大人として扱われます")
このプログラムでは、変数ageが18以上の場合にだけ、2行のprintが実行されます。
条件を満たさない場合は、ifの中の処理は1行も実行されません。
Pythonではif文の最後に必ず:(コロン)が必要です。
コロンを書き忘れると文法エラーになりますので注意してください。
インデント(字下げ)のルールと注意点
Pythonではインデント(行頭のスペース)が非常に重要です。
インデントの深さによって「どこからどこまでがifに属する処理か」が決まるからです。

一般的には、次のようなルールに従って書きます。
- if文の行の末尾に
:を書く - if文の中に書く行は、半角スペース4つ分インデントする
- 同じif文の中の行は、インデント幅をそろえる
- タブとスペースを混ぜない(スペースに統一する)
具体例で確認します。
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 == 10 | xが10と等しければTrue |
| != | 等しくない | x != 0 | xが0でなければTrue |
| > | より大きい | x > 5 | xが5より大きければTrue |
| < | より小さい | x < 100 | xが100より小さければTrue |
| >= | 以上 | x >= 18 | xが18以上ならTrue |
| <= | 以下 | x <= 60 | xが60以下ならTrue |
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ならTrue | age >= 18 and age < 65 |
| or | オア | どちらか一方でもTrueならTrue | is_weekend or is_holiday |
| not | ノット | TrueとFalseを反転して判定する | not is_logged_in |
具体的なコードで見てみます。
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代です
成人の社会人です
論理演算子を使うと条件が長くなりやすいため、丸かっこでグループ化して読みやすくするとよいです。
age = 17
is_member = True
# ()でグループ化して意味をはっきりさせる
if (age < 18 and is_member) or age >= 65:
print("割引の対象です")
in, not inを使ったメンバーシップ判定
in演算子は、「ある値がリストや文字列などに含まれているか」を調べるための演算子です。
逆にnot inは「含まれていないか」を調べます。

コード例を見てみましょう。
fruits = ["apple", "banana", "orange"]
if "apple" in fruits:
print("りんごがあります")
if "grape" not in fruits:
print("ぶどうはありません")
出力は次のとおりです。
りんごがあります
ぶどうはありません
文字列に対してもinは使えます。
text = "Hello Python"
if "Python" in text:
print("Pythonという単語が含まれています")
メンバーシップ判定は、複数の候補をまとめて扱えるので、if文をすっきり書きたいときに便利です。
color = "blue"
# 複数候補をリストでまとめる
if color in ["red", "blue", "green"]:
print("基本色の1つです")
真偽値(bool)と評価される値の仕組み
if文の条件式は、最終的にTrue(真)かFalse(偽)のどちらかになります。
Pythonでは、この真偽値の型をboolと呼びます。
print(True)
print(False)
print(type(True)) # 型の確認
True
False
<class 'bool'>
Pythonのif文では、一部の値は自動的にFalseとして扱われます。
代表的なものは次のとおりです。
| 値 | 評価結果 |
|---|---|
| 0 | False |
| 0.0 | False |
| 空文字列 “” | False |
| 空リスト [] | False |
| 空辞書 {} | False |
| None | False |
| 上記以外 | True |
この性質を利用すると、次のように書けます。
name = ""
# nameが空文字列の場合、ifの条件はFalseになる
if name:
print("名前が入力されています")
else:
print("名前が空です")
「空かどうか」を調べるときは、そのままifに渡すと自然でPythonらしい書き方になります。
if文のバリエーション
if、elif、elseの使い分け
条件が2つ以上ある場合は、elifやelseを組み合わせるとスマートに書けます。
基本形は次のようになります。
if 条件式1:
処理1
elif 条件式2:
処理2
elif 条件式3:
処理3
else:
どの条件にも当てはまらない場合の処理

実際の例で確認します。
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行で書けます。
これを一般に「三項演算子」または「条件演算子」と呼びます。
構文は次のとおりです。
結果 = (値1) if 条件式 else (値2)
条件式がTrueなら値1が、Falseなら値2が代入されます。
age = 20
message = "成人" if age >= 20 else "未成年"
print(message)
成人
1行ifは便利ですが、条件や処理が複雑な場合は通常のif文の方が読みやすいです。
可読性を優先し、短く書くことだけを目的に使いすぎないようにしましょう。
passを使った何もしないif文
ときどき「条件は書いておきたいが、中身の処理はまだ決めていない」という場面があります。
Pythonではそのようなときにpassを使います。
age = 17
if age < 18:
# ここには後で処理を書く予定
pass
else:
print("成人です")
passは「ここには何も書かない」という意味の文です。
文法上、何か1行必要な場所を空けておくためのダミーと考えるとよいです。
if文だけでなく、関数やクラスの中身が未定のときにも使われます。
例外的な条件分岐(if文以外との違い)の整理
Pythonでは、条件によって処理を切り替える仕組みはif文だけではありません。
代表的なものを整理しておきます。
| 機能 | 主な用途 | 例 |
|---|---|---|
| if文 | 値に応じた一般的な条件分岐 | 値が範囲内かどうかで処理を変える |
| try〜except(例外処理) | エラーの発生有無で処理を切り替え | ファイル読み込みの成功・失敗 |
| match文(Python 3.10〜) | 値のパターンマッチング | 型や構造に応じた分岐 |
たとえば、ファイルが存在するかどうかで処理を分けたい場合、単にifで調べるだけでなく、実際には例外処理を組み合わせた方が安全です。
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文を書くことができます。
これをネスト(入れ子)と呼びます。

コード例を見てみます。
age = 20
has_ticket = True # チケットを持っているか
if age >= 18:
print("年齢条件を満たしています")
if has_ticket:
print("入場できます")
else:
print("チケットがないため入場できません")
else:
print("年齢が足りないため入場できません")
この例では、age >= 18がTrueの場合にだけ、チケットの有無をチェックする二段目のif文が実行されます。
年齢条件を満たしています
入場できます
ネストは便利ですが、インデントが深くなりすぎると読みづらくなるので、次のセクションで改善方法も紹介します。
ネストしたif文を読みやすくするリファクタリング
if文が何重にもネストされると、コードを追いかけるのが難しくなります。
次のような書き方は、初学者だけでなく経験者にとっても読みにくいです。
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: 条件の否定で早く抜ける
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: 複雑な条件は変数に置き換える
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文があったとします。
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("入場条件を満たしていません")
これを関数に切り出してみましょう。
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: 比較と代入の混同(== と =)
==と=を混同すると、意図しない動作になります。
x = 10
# 誤り例: if x = 10: # これは構文エラーになる
# 正しくは:
if x == 10:
print("xは10です")
エラーになるので気づきやすいミスですが、「比較は必ず==」と体で覚えるのが一番の対策です。
ミス2: インデントのずれ
インデントがずれると、意図したブロックから外れてしまいます。
x = 5
if x > 3:
print("3より大きいです")
print("この行はifの外です")
上の例では2行目だけがifの中で、3行目はifの外です。
エディタの設定で「タブをスペースに変換」「インデントガイド線の表示」を有効にすると、目で確認しやすくなります。
ミス3: 比較にisを使ってしまう
Pythonにはisという演算子がありますが、これは「同じオブジェクトかどうか」を判定するもので、値の等価比較には通常==を使います。
x = 1000
# 一部のケースでは is を使うと正しく判定できない
if x is 1000: # 推奨されない書き方
print("1000です")
if x == 1000: # 正しい書き方
print("1000です")
値が等しいかどうかを調べるときは==、Noneとの比較にはis Noneというルールで覚えておくとよいです。
value = None
if value is None:
print("値が設定されていません")
ミス4: 条件が長くなりすぎて意味不明になる
1行に条件を詰め込みすぎると、どのような意味の条件なのか分かりづらくなります。
# 読みにくい例
if (age >= 18 and age < 65 and has_ticket and not is_banned) or is_staff:
...
防ぎ方としては次のような工夫があります。
- 丸かっこでグループ化する
- 意味のある名前の変数に分解する
- 関数に切り出す
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文の使い方が身についていきます。
