このページでは、while文のelseの基本と使い方について詳しく解説していきます。
while文の基本については「Pythonのwhile文による繰り返し処理(whileループ)の基本」で解説しています。先に目を通しておきましょう。
1. while文のelseとは
Pythonのwhile文のelseは、「whileループを正常に終了した時の処理」を書く時に使います。以下が基本的な書き方です。
while 条件式:
処理文
else:
処理文
このようにelseはインデントは入れずに「while 条件式:」と行頭を揃えて書きます。elseブロックは下図の流れで処理されます。
2. while文のelseの実践的な使い方
2.1. elseは単体で使う意味は小さい
上の図を見て気づいた方もいると思いますが、実はwhile文のelseはそれ単体では特に意味がありません。なぜなら、else文がなくても次のようにwhileブロックの後に、同じ処理を書いておけば結果は同じになるからです。
while 条件式:
処理文
処理文 # ←whileブロックの外に処理を書く
このため処理上はelseを単体で使う意味はありません。
ただし、あえてelseを書くことによって、その処理がwhileブロックの中で行いたいものであることを第三者に明確に示すという重要な使い方もあります。腕の良いプログラマーは、そうした見た目の分かりやすさも意識したコードを書きます。これは実務では重要なことなので、ぜひ心がけておきましょう。
2.2. elseはbreakと組み合わせて使う
whileループの中でelseが意味を持つのは、次のようにbreakと組み合わせた時です。なおbreakについては「Pythonのwhile文のbreakを使ったループの中断条件の作り方」で解説しています。
while 条件式:
処理文(任意)
if 条件式:
処理文(任意)
break
処理文(任意)
else:
処理文
breakと組み合わせた場合、elseブロックはwhileループを正常に終了した時のみ実行されて、breakして中断した場合には実行されません、つまりelseがあることによって、breakが実行されたのかされなかったのか明確にわかるようになるのです。
丁度下図のような条件分岐経路になります。
例えば次のコードをご覧ください。リストに要素を5つ追加してwhileループが正常に終了した場合はelseブロックが実行されています。そしてbreakした場合は、elseブロックは実行されていません。
import random
nums = []
while len(nums) <5:
num = random.randint(-10, 100)
if num < 0:
print(nums, f'値が{num}なので中断しました。')
break
nums.append(num)
else:
print(nums, f'ループが正常に終了しました。')
このコードの処理の流れは下図のようになっています。
ちなみにPythonでは繰り返し処理でリストを作る時は、while文よりもfor文を使う方がより「Pythonらしい」書き方です。「Pythonのfor文による繰り返し処理(forループ)の基本」で解説しているので、ぜひご確認ください。
3. まとめ
ここまで見てきた通りwhile文のelseは、それ単体で使っても、あまり意味がありません。breakと同時に使うことによって、whileループを正常に終了した場合と、途中で中断した場合の処理を書き分けることができます。ただし、breakと組み合わせなくても、その処理がwhileループ内で行いたいものであることを明示するためという利用方法もあります。
いずれにせよ、分岐経路をしっかりと抑えておきましょう。
コメント