
Table of Contents(目次)
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('ログイン成功')
を実行します。

ケース別処理のまとめ
user="Taro"
かつpassword="abc123"
- 1つ目の
if
がTrue
- ネストされた
if
もTrue
print('ログイン成功')
が実行される
- 1つ目の
user="Taro"
かつpassword="wrong"
- 1つ目の
if
がTrue
- ネストされた
if
はFalse
print
は実行されない
- 1つ目の
user="Jiro"
(ユーザー名が違う)- 1つ目の
if
がFalse
- 1つ目の
if
のブロックは処理されない
- 1つ目の
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('逃げる')
