今回はWhileを使った繰り返し処理についてです。While文は条件式が真の間だけ処理を繰り返します。
本記事では、While文での条件式の書き方や、処理の流れを見ていきたいと思います。
While文の書き方
While文は以下のような構文で記述します。
while 条件式:
処理1
処理2…
Pythonではインデントでブロックが決まります。上記の例では、条件式が真(True)の間、処理1と処理2が実行されます。
では、実際に条件式を書いて処理を実行してみます。
i = 0
while i <= 3:
print(str(i)+"回目の処理")
i += 1
上記では、iが3以下の場合にprint文を出力するようにしています。出力結果は次のようになります。
#Output
0回目の処理
1回目の処理
2回目の処理
3回目の処理
breakとcontinue
条件に応じて途中でWhile文から抜け出す場合はbreakを用います。
i = 0
while i <=3:
if i == 2:
break
print(str(i)+"回目の処理")
i += 1
#Output
0回目の処理
1回目の処理
上記では、iが2になったらwhile処理から抜け出します。breakの時点で処理を抜け出すので、それ以降のWhile文中の処理は行われません。
continueを用いれば、While処理から抜け出さずに、現在のループだけをスキップすることができます。
i = 0
while i <=3:
if i == 2:
i += 1
continue
print(str(i)+"回目の処理")
i += 1
#Output
0回目の処理
1回目の処理
3回目の処理
処理が正常終了した際に実行する処理(else)
While文の処理が最後まで正常に終了した場合に実行する処理をelseで追加することができます。
i = 0
while i <=3:
print(str(i)+"回目の処理")
i += 1
else:
print("処理が正常に終了しました")
#Output
0回目の処理
1回目の処理
2回目の処理
3回目の処理
処理が正常に終了しました
elseの処理は、breakでループを抜けた場合は実行されません。
一方、While文中でcontinueが実行された場合でも、最後まで処理が終わればelse内の処理が実行されます。
無限ループに注意
While文で注意しないといけないのが、無限ループです。While文は、どこかのタイミングで処理が終わる(または終わらせることができる)ようにしておく必要があります。
例えば、以下のようなコードがあります。
i = 0
while i <= 3:
print(str(i)+"回目の処理")
この場合、条件判定に用いるiは永遠に0のままなので、While文が無限に実行されてしまいます。
#Output
0回目の処理
0回目の処理
0回目の処理
0回目の処理
0回目の処理
0回目の処理
0回目の処理
0回目の処理
0回目の処理.....(無限に続く)
While文に用いる条件式に用いる変数は、インクリメントやデクリメントを忘れずに実施するようにしてください(数値の場合)。
無限ループに陥った場合は、Ctrl + CをIDE上やコンソール上で押すことで強制終了することができます。
While True:
無限ループに注意と書いた直後ですが、While文の条件式をTrueにすると、無限に処理が実行されます。
i = 0
while True:
print(str(i)+"回目の処理")
#Output
0回目の処理
0回目の処理
0回目の処理
0回目の処理
0回目の処理
0回目の処理
0回目の処理
0回目の処理
0回目の処理.....(無限に続く)
無限ループなるのにどこで使うねんと思う方もいるかもしれません。この条件は、カメラ画像をリアルタイムに処理し続けたりする場合に便利です。処理を中止するタイミングを自分で指定したいときは、条件式をTrueにするのが有効です。
無限ループ前提の処理になるので、必ずループを抜け出せる処理(何かキーを押せば終了する等)の処理を加えておくことをお勧めします。
まとめ
PythonでのWhile文の書き方を見てきました。特に、While文では無限ループに陥らないように注意が必要です。
終わりのある条件になっているかということを確認しながらコードを書いてください。また、万一無限ループに陥った場合の抜け出し方(強制終了)も頭に入れておくことで、落ち着いて対処ができると思います。
ではでは👋