Python if文のネスト完全入門|初心者向け条件分岐の基礎とサンプルコード
スポンサーリンク

Pythonのif文ネストルール

ネストのルールはとてもシンプルです。if-elif-elseの条件が満たされたときに実行する処理を明確にするために、コードのブロックを1段階深くインデントして書きます。たとえば、通常のif文の処理はスペース4つでインデントします。その中にさらにif文(ネストされたif文)を書く場合は、そのブロックをスペース8つでインデントします。つまり、ネストが深くなるごとにインデントを4つずつ増やしていけばよいのです。

このルールを守れば、if文のネストを制限なく深くすることが可能です。ただし、ネストが深くなりすぎると可読性が低下するため注意が必要です。

# 最初の条件をチェック: 条件AがTrueの場合の処理
if 条件A:
    処理A
    # 条件Aのブロックの中でさらにネストした条件分岐
    if 条件A_1:
        処理A_1
        # 条件A_1のブロック内でさらにネストした条件分岐
        if 条件A_1_1:
            処理A_1_1
        else:
            処理A_1_2
    elif 条件A_2:
        # 条件A_1がFalseかつ条件A_2がTrueのときに実行される処理
        処理A_2
    else:
        # 条件A_1, 条件A_2がともにFalseのときに実行される処理
        処理A_3
    # "if 条件A"ブロックの終了 #

# 条件AがFalseのときにチェックされる条件
elif 条件B:
    処理B
    if 条件B_1:
        処理B_1
    else:
        処理B_2
    # "elif 条件B"ブロックの終了 #

# 条件A, 条件BがFalseのときの処理
else:
    処理C
    if 条件C_1:
        処理C_1
    # "else"ブロックの終了 #

Pythonでログインチェックのif文ネストサンプル

if-elif-elseの条件が満たされた際に実行されるコードブロック内で、if文をネストすることができます。

まずは、簡単な例から見てみましょう。"user"と"password"をチェックし、両方の条件を満たしているかどうかを確認するコードになります。

user = 'Taro'
password = 'abc123'

if user == 'Taro':
    # 1つ目のif文のブロック内
    if password == 'abc123':
        # このブロックは、ネストされたif文のブロック内
        print('ログイン成功')

処理手順

  • (1行目) user = 'Taro' :変数userに'Taro'を代入します。
  • (2行目) password = 'abc123' :変数passwordに'abc123'を代入します。
  • (4行目) if user == 'Taro': :変数userが'Taro'と等しいかを比較します。
    • ==は両辺の値が同じかどうかを調べます
    • 1つ目のifの条件がTrueだった場合だけ、5行目以降のブロック(インデントの部分)が実行対象になります。
  • (6行目) if password == 'abc123': :変数passwordが'abc123'と等しいかを比較します。
  • (8行目) 2つ目のifの条件がTrueならprint('ログイン成功')を実行します。

ケース別処理のまとめ

  1. user="Taro"かつpassword="abc123"
    1. 1つ目のifTrue
    2. ネストされたifTrue
    3. print('ログイン成功')が実行される
  2. user="Taro"かつpassword="wrong"
    1. 1つ目のifTrue
    2. ネストされたifFalse
    3. printは実行されない
  3. user="Jiro"(ユーザー名が違う)
    1. 1つ目のifFalse
    2. 1つ目のifのブロックは処理されない

if文ネストの備考・注意点

  • インデント(字下げ)で「どのifのブロックか」を示します。通常は4スペースで統一します。
    • ネストされたif文のブロックは、更に4スペース分深くします。
  • =は代入、==は比較です。初心者が最初に混同しやすい点なので、注意してください。
  • 今回の例では、どちらかのif文の条件がFalseになると、print('ログイン成功')は実行されずに処理が終了します。

このコードは、今後、bool型(and, or)や関数の学習時にブラッシュアップしていきます。

現時点での重要なポイントは、if文のネストで複数の条件をチェックできるということです。

スポンサーリンク

Pythonゲーム制御のif文ネストサンプル

次のコードは、ゲームのプレーヤーの行動を決めるための条件分岐になります。プレイヤーの体力やスタミナ、敵の体力などによって結果が変化します。

コードの後にフローチャートを掲載しているので、コードと比較しながら処理の流れを理解できます。

これはサンプルコードであるため、実際のゲームシステムと比べると単純に見えるかもしれません。また、体力などのプレイヤーのステータスは通常リアルタイムで変化しますが、ここでは固定値としています。値を変更してコードの流れがどう変化するか試してみてください。

# プレイヤーや敵の状態を変数で表現
player_hp = 75           # プレイヤーの体力
player_stamina = 65      # プレイヤーのスタミナ
enemy_hp = 90            # 敵の体力
has_healing_item = True  # 回復アイテムを持っているか
can_call_ally = False    # 仲間を呼べるかどうか

if player_hp > 50:
    print('攻撃する')
    if player_stamina >= 60:
        print('必殺技を繰り出す!')
    elif enemy_hp >= 80:
        print('弱点を狙う攻撃をする')
    else:
        print('通常攻撃で確実に体力を削る')

elif player_hp > 30:
    print('回復を考える')
    if has_healing_item:
        print('回復アイテムを使う')
    else:
        print('防御して耐える')

else:
    print('体力が少ない、ピンチ!')
    if can_call_ally:
        print('仲間に助けを求める')
    else:
        print('逃げる')
スポンサーリンク