【2025年最新】Python if文の使い方完全ガイド:基礎から上級テクニックまで徹底解説

Pythonプログラミングにおいて、if文は最も基本的かつ重要な制御構文の一つです。初心者から上級者まで、誰もが日常的に使用するif文について、基礎から応用まで網羅的に解説します。

この記事を読むことで、Python if文の全てを理解し、より効率的で読みやすいコードが書けるようになります。

目次

Python if文の基礎知識 {#基礎知識}

if文は条件分岐を行うための制御構文で、指定した条件が真(True)の場合にのみ、特定のコードブロックを実行します。

if文の基本構文

if 条件式:
    実行したい処理

重要なポイント:

  • 条件式の後には必ずコロン(:)を付ける
  • 実行したい処理は4つの半角スペース(またはタブ)でインデントする
  • Pythonではインデントが文法的に重要な意味を持つ

基本的なif文の書き方 {#基本的な書き方}

最もシンプルなif文

age = 20

if age >= 18:
    print("成人です")

変数の値による条件分岐

score = 85

if score >= 80:
    print("優秀な成績です")

if score < 60:
    print("もっと頑張りましょう")

文字列の条件判定

name = "田中"

if name == "田中":
    print("こんにちは、田中さん")

# 文字列の包含判定
message = "Pythonプログラミング"
if "Python" in message:
    print("Pythonに関する内容です")

比較演算子の使い方 {#比較演算子}

Pythonで使用できる比較演算子一覧:

演算子 意味
== 等しい a == b
!= 等しくない a != b
< より小さい a < b
<= 以下 a <= b
> より大きい a > b
>= 以上 a >= b
is 同一オブジェクト a is b
is not 異なるオブジェクト a is not b
in 包含関係 a in b
not in 非包含関係 a not in b

実用例

# 数値の比較
temperature = 25
if temperature > 30:
    print("暑い日です")
elif temperature < 10:
    print("寒い日です")
else:
    print("過ごしやすい気温です")

# リストの包含判定
fruits = ["りんご", "バナナ", "オレンジ"]
if "りんご" in fruits:
    print("りんごがあります")

# None値の判定
data = None
if data is not None:
    print("データが存在します")
else:
    print("データがありません")

論理演算子の活用 {#論理演算子}

複数の条件を組み合わせる際に使用する論理演算子:

and演算子(論理積)

すべての条件が真の場合に真を返す

age = 25
income = 300

if age >= 20 and income >= 200:
    print("ローンの審査に通りました")

# より複雑な条件
username = "admin"
password = "secret123"
is_active = True

if username == "admin" and password == "secret123" and is_active:
    print("管理者としてログインしました")

or演算子(論理和)

いずれかの条件が真の場合に真を返す

weather = "雨"

if weather == "雨" or weather == "雪":
    print("傘を持って行きましょう")

# 複数の値をチェック
grade = "A"
if grade == "A" or grade == "B" or grade == "C":
    print("合格です")

# より効率的な書き方
if grade in ["A", "B", "C"]:
    print("合格です")

not演算子(論理否定)

条件の真偽を反転させる

is_weekend = False

if not is_weekend:
    print("平日です")

# リストが空でない場合
items = [1, 2, 3]
if not len(items) == 0:  # または if items:
    print("アイテムがあります")

elif文とelse文 {#elif-else}

elif文による多段階条件分岐

score = 85

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"

print(f"あなたの成績は{grade}です")

実践的なelif文の使用例

def get_season(month):
    if month in [12, 1, 2]:
        return "冬"
    elif month in [3, 4, 5]:
        return "春"
    elif month in [6, 7, 8]:
        return "夏"
    elif month in [9, 10, 11]:
        return "秋"
    else:
        return "無効な月です"

# 使用例
current_month = 7
print(f"{current_month}月は{get_season(current_month)}です")

ネストしたif文 {#ネスト}

if文の中にさらにif文を書くことをネスト(入れ子)といいます。

基本的なネスト構造

age = 25
has_license = True
has_car = False

if age >= 18:
    print("運転可能な年齢です")
    if has_license:
        print("運転免許を持っています")
        if has_car:
            print("車で移動できます")
        else:
            print("車を購入する必要があります")
    else:
        print("運転免許を取得してください")
else:
    print("運転できません")

ネストを避けるリファクタリング

ネストが深くなりすぎると読みにくくなるため、early returnや論理演算子を使って改善できます。

# 改善前(ネストが深い)
def check_access(user_role, is_logged_in, has_permission):
    if is_logged_in:
        if user_role == "admin":
            if has_permission:
                return "アクセス許可"
            else:
                return "権限不足"
        else:
            return "管理者権限が必要です"
    else:
        return "ログインしてください"

# 改善後(early returnを使用)
def check_access_improved(user_role, is_logged_in, has_permission):
    if not is_logged_in:
        return "ログインしてください"
    
    if user_role != "admin":
        return "管理者権限が必要です"
    
    if not has_permission:
        return "権限不足"
    
    return "アクセス許可"

三項演算子(条件式) {#三項演算子}

Pythonの三項演算子は、簡潔に条件分岐を記述できる構文です。

基本構文

# 基本形
結果 = 真の場合の値 if 条件 else 偽の場合の値

# 例
age = 20
status = "成人" if age >= 18 else "未成年"
print(status)  # 出力: 成人

実用的な三項演算子の例

# 最大値を求める
a, b = 10, 20
max_value = a if a > b else b

# 空文字列のデフォルト値設定
name = ""
display_name = name if name else "名無し"

# リストの要素数チェック
items = [1, 2, 3]
message = f"{len(items)}個のアイテムがあります" if items else "アイテムがありません"

# 複数の三項演算子を連鎖
score = 85
grade = "A" if score >= 90 else "B" if score >= 80 else "C" if score >= 70 else "F"

高度なテクニック {#高度なテクニック}

Truthyな値とFalsyな値

Pythonでは、以下の値が偽(Falsy)として扱われます:

# Falsyな値の例
falsy_values = [
    False,      # ブール値のFalse
    0,          # 数値の0
    0.0,        # 浮動小数点の0.0
    "",         # 空文字列
    [],         # 空リスト
    {},         # 空辞書
    set(),      # 空セット
    None        # None値
]

for value in falsy_values:
    if not value:
        print(f"{repr(value)} は Falsy です")

all()とany()関数の活用

# all(): すべての要素が真の場合に真
scores = [80, 90, 85, 92]
if all(score >= 60 for score in scores):
    print("全科目で合格点を取りました")

# any(): いずれかの要素が真の場合に真
temperatures = [35, 28, 30, 33]
if any(temp > 32 for temp in temperatures):
    print("真夏日がありました")

# 複雑な条件判定
users = [
    {"name": "田中", "age": 25, "active": True},
    {"name": "佐藤", "age": 30, "active": False},
    {"name": "鈴木", "age": 22, "active": True}
]

# アクティブな成人ユーザーが存在するかチェック
if any(user["age"] >= 20 and user["active"] for user in users):
    print("アクティブな成人ユーザーがいます")

match文(Python 3.10以降)

Python 3.10で導入されたmatch文は、複雑な条件分岐をより読みやすく記述できます。

def handle_http_status(status_code):
    match status_code:
        case 200:
            return "成功"
        case 404:
            return "ページが見つかりません"
        case 500:
            return "サーバーエラー"
        case code if 400 <= code < 500:
            return "クライアントエラー"
        case _:
            return "不明なステータスコード"

# 使用例
print(handle_http_status(200))  # 成功
print(handle_http_status(403))  # クライアントエラー

実践的な応用例 {#実践例}

ユーザー入力の検証

def validate_user_input():
    while True:
        age_input = input("年齢を入力してください: ")
        
        # 数値かどうかチェック
        if not age_input.isdigit():
            print("数値を入力してください")
            continue
        
        age = int(age_input)
        
        # 年齢の範囲チェック
        if age < 0 or age > 150:
            print("有効な年齢を入力してください(0-150)")
            continue
        
        # カテゴリー判定
        if age < 13:
            category = "子供"
        elif age < 20:
            category = "未成年"
        elif age < 65:
            category = "成人"
        else:
            category = "高齢者"
        
        print(f"あなたは{category}に分類されます")
        break

ファイル処理での条件分岐

import os

def process_file(filename):
    # ファイルの存在チェック
    if not os.path.exists(filename):
        print(f"ファイル '{filename}' が見つかりません")
        return
    
    # ファイルサイズチェック
    file_size = os.path.getsize(filename)
    if file_size == 0:
        print("ファイルが空です")
        return
    elif file_size > 1024 * 1024:  # 1MB
        print("ファイルが大きすぎます")
        return
    
    # 拡張子による処理分岐
    _, ext = os.path.splitext(filename)
    if ext.lower() in ['.txt', '.md']:
        print("テキストファイルを処理中...")
    elif ext.lower() in ['.jpg', '.png', '.gif']:
        print("画像ファイルを処理中...")
    else:
        print("サポートされていないファイル形式です")

APIレスポンスの処理

def handle_api_response(response_data):
    # レスポンスの存在チェック
    if not response_data:
        return {"error": "レスポンスが空です"}
    
    # ステータスコードチェック
    status_code = response_data.get("status_code")
    if not status_code:
        return {"error": "ステータスコードがありません"}
    
    # 成功レスポンスの処理
    if 200 <= status_code < 300:
        data = response_data.get("data")
        if not data:
            return {"warning": "データが空です"}
        return {"success": True, "data": data}
    
    # エラーレスポンスの処理
    elif 400 <= status_code < 500:
        error_message = response_data.get("message", "クライアントエラー")
        return {"error": f"リクエストエラー: {error_message}"}
    
    elif 500 <= status_code < 600:
        return {"error": "サーバーエラーが発生しました"}
    
    else:
        return {"error": f"不明なステータスコード: {status_code}"}

よくある間違いと対処法 {#よくある間違い}

間違い1: 代入演算子と比較演算子の混同

# 間違い
x = 5
if x = 5:  # SyntaxError
    print("xは5です")

# 正しい
x = 5
if x == 5:
    print("xは5です")

間違い2: 浮動小数点数の比較

# 問題のあるコード
a = 0.1 + 0.2
if a == 0.3:
    print("等しい")  # 実行されない場合がある

# 改善されたコード
import math
a = 0.1 + 0.2
if math.isclose(a, 0.3):
    print("等しい")

間違い3: ミュータブルオブジェクトのデフォルト引数

# 問題のあるコード
def add_item(item, items=[]):
    items.append(item)
    return items

# 改善されたコード
def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

間違い4: チェーン比較の誤解

# 誤解しやすい例
x = 5
# False < 5 < True は True になる(Falseは0、Trueは1として扱われる)
if False < x < True:
    print("これは実行される")  # 予期しない動作

# 明確な比較
if 0 < x < 10:
    print("xは1から9の間です")

パフォーマンスの最適化

条件の順序による最適化

# 効率的でない順序
def check_complex_condition(user):
    if expensive_database_query(user) and user.is_active:
        return True
    return False

# 効率的な順序(軽い条件を先に)
def check_complex_condition_optimized(user):
    if user.is_active and expensive_database_query(user):
        return True
    return False

辞書を使った条件分岐の最適化

# if-elif-elseチェーンが長い場合
def get_discount_rate_slow(membership_type):
    if membership_type == "bronze":
        return 0.05
    elif membership_type == "silver":
        return 0.10
    elif membership_type == "gold":
        return 0.15
    elif membership_type == "platinum":
        return 0.20
    else:
        return 0.0

# 辞書を使った高速化
def get_discount_rate_fast(membership_type):
    discount_rates = {
        "bronze": 0.05,
        "silver": 0.10,
        "gold": 0.15,
        "platinum": 0.20
    }
    return discount_rates.get(membership_type, 0.0)

まとめ

Python if文は、プログラムの流れを制御する重要な構文です。基本的な使い方から高度なテクニックまで理解することで、より効率的で読みやすいコードが書けるようになります。

重要なポイント:

  • 基本構文: 条件式の後にコロン、適切なインデントを使用
  • 比較演算子: ==, !=, <, <=, >, >=, is, in などを適切に使い分け
  • 論理演算子: and, or, not を組み合わせて複雑な条件を表現
  • 可読性: ネストが深くなりすぎないよう、early returnや三項演算子を活用
  • パフォーマンス: 条件の順序や辞書を使った最適化を検討

これらの知識を活用して、より良いPythonコードを書いていきましょう。継続的な練習と実践を通じて、if文を自在に操れるようになります。


この記事は2025年の最新情報に基づいて作成されています。Pythonのバージョンアップデートにより、新しい機能が追加される可能性があります。

らくらくPython塾 – 読むだけでマスター

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>理系出身者向けのPython爆速講座