このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Python入門】while文やfor文のelse節

while文やfor文のelse節
Pythonでは、while文やfor文にelse節を付けることができ、ループが最後まで正常に実行された場合に追加の処理を行うことが可能です。これらのelse節は、ループがbreak文によって中断された場合は実行されず、すべての反復が終了したときにのみ動作します。これにより、例えば、ユーザ入力のチェックや条件に基づく検証処理を柔軟に記述できます。
ここでは、while文とfor文のelse節の基本構文とその動作、そして実践的なサンプルプログラムを通して、使い方を詳しく解説します。

プログラムのダウンロード
「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。
1.while文のelse節
1.1. 基本構文と動作
while文のelse節は、while文の条件がFalseになるまでループが継続し、break文によって中断されなかった場合に実行されます。基本的な構文は以下の通りです。
while 条件式:
文1
文2
else:
文3
解説
- ループ内の条件式がTrueの場合、インデントされた文1、文2が実行されます。
- もしbreak文が実行されず、条件式が最終的にFalseとなった場合に、else節内の文3が実行されます。
- ループがbreakで中断されると、else節はスキップされます。
1.2. サンプルプログラム:色のコレクション
ここでは、ユーザにお気に入りの色を入力してもらい、重複がなければ色をリストに追加し、最終的にすべての色が登録された場合に「All colors registered: …」と表示するプログラムを作成します。もし重複する色が入力された場合は、警告メッセージを表示してループを中断し、else節は実行されません。
# 空のリストを用意してお気に入りの色を格納する
colors = []
# colorsリストに3つの色が登録されるまでループを続ける
while len(colors) < 3:
color = input("Enter a color: ")
if color in colors:
print(f"{color} is already registered.")
break # 重複が見つかったらループを終了する
colors.append(color)
else:
# ループがbreakされずに終了した場合のみ実行される
print("All colors registered:", colors)
実行結果
Enter a color: red
Enter a color: blue
Enter a color: green
All colors registered: ['red', 'blue', 'green']
解説
while len(colors) < 3:
により、colorsリストの要素数が3未満の場合にループが継続されます。- ユーザからの入力は
input("Enter a color: ")
で取得され、変数color
に代入されます。 if color in colors:
で既に登録済みの色かどうかをチェックし、重複していれば警告メッセージを表示してbreak
文でループを中断します。- ループが正常に終了(すなわち3つの異なる色が登録された場合)すると、else節が実行され、最終的な色のリストが表示されます。
2.for文のelse節
2.1. 基本構文と動作
for文のelse節は、ループがすべての要素に対して反復処理を実行し、break文によって中断されなかった場合に実行されます。基本構文は次の通りです。
for 変数 in イテラブル:
文1
文2
else:
文3
解説
- for文は、イテラブルから各要素を順に取り出し、文1、文2を実行します。
- もしループがすべての要素に対して実行された場合、else節の文3が実行されます。
- break文でループが中断されると、else節はスキップされます。
2.2. サンプルプログラム:テストの点数判定
ここでは、3つの教科のテストの点数をリストに格納し、すべて70点以上であれば「Pass」と表示するプログラムを作成します。1つでも70点未満の点数がある場合は、break文によってループを中断し、else節は実行されません。
# 3つの教科のテストの点数を格納したリストを定義
scores = [75, 85, 95]
# for文を使って各点数をチェックする
for score in scores:
if score < 70:
break # 70点未満の点数が見つかった場合、ループを中断する
else:
# すべての点数が70点以上の場合のみ実行される
print("Pass")
実行結果
Pass
解説
- リスト
scores
に格納された各点数に対して、for文が反復処理を行います。 - 各反復で、
if score < 70:
によって点数が70未満かどうかが評価されます。 - 70点未満の点数が存在するとbreak文が実行され、ループは中断されるため、else節は実行されません。
- 全ての点数が70点以上の場合、ループが最後まで実行され、else節で「Pass」が出力されます。
【表:for文・while文のelse節の主要なポイント】
制御構造 | 基本構文 | else節の実行条件 |
---|---|---|
while文 | while 条件式: 文… else: 文… | 条件式がFalseになるまでループが実行され、breakが実行されなかった場合 |
for文 | for 変数 in イテラブル: 文… else: 文… | すべての要素が反復処理され、break文で中断されなかった場合 |
まとめ
while文やfor文のelse節は、ループが最後まで正常に実行された場合にのみ追加の処理を行うための便利な構造です。
- 基本構文: ループの本体の後に
else:
を記述し、インデントされた文がループ終了時に実行されます。 - 動作の流れ: ループ内でbreak文が実行されない場合、else節が実行され、breakで中断された場合はスキップされます。
- 実践例: ユーザからお気に入りの色を3つ登録するwhile文の例や、テストの点数が全て基準を満たしている場合に「Pass」と表示するfor文の例を通じて、その使い方と利点を確認しました。
これらの制御構造を適切に活用することで、ループの終了条件に応じた柔軟な後処理が可能となり、より効率的で読みやすいプログラムを作成できるようになります。