条件が成立する場合に処理を実行するかどうかで分岐する処理をif文で行いましたが、これはコードが上から順番に処理を判断して終了するプログラミングでした。
今度は、条件が成立する場合に、同じ処理を繰り返す(ループ)という処理をみていきたいと思います。
このように、条件が成り立つ間ループを実行するには、Pythonではwhile文を使います。(反復処理にはPythonでは他にfor文もあります)
while文でループ処理する
whileを使ってループ処理のコードを書いてみましょう。
whileの後ろに条件式を書いて、末尾にコロン(:)を記述します。その行の下にインデントで字下げして、実行する処理をブロックとして記述します。
形としては次のようになります。
while 条件式:
実行コード
これをそのままプログラミングしてしまうと条件式が成立している間は無限ループすることになります。
while文と無限ループ
上の形をそのまま簡単なコードにしてみましょう。
while True:
print("無限に処理がくりかえされます。")
これはここでは実行しませんが、もし実行した場合は延々と「無限に処理がくりかえされます。」の文が繰り返し表示されます。
この無限ループの処理を万が一実行してしまって止めたい場合は、[control] + [C]を押して終了させるなどしましょう。
こういう無限ループにならないように、事前に変数を用意してループカウンタとして利用することで、繰り返し処理を終了させるようにします。(他には終了条件を設定してbreak文を使ったりします)
例として次のようなコードが考えられます。
count = 0
while count < 10:
print(count)
count += 1
変数coutをループカウンタとして最初に初期化し、コードを実行したらこのループカウンタを1増加させて先頭に戻るという処理になります。
対話型シェルで実行すると次のようになります。
countは初期値は0です。条件式はcountが10より小さい場合ですから成立するのでprintでcountの値が表示されます。countに1が加えられて先頭に戻り処理が繰り返され、countが10になったところで条件に合わなくなり処理が終了しているということになります。
breakでループの中止
上の例では、0から9まで10回ループ処理が行われました。これを途中で何かの条件によって途中でループを中止したい場合があります。
breakを使うとループ中止して処理を抜けることができるようになります。
上で使ったコードとちょっと変えてみます。
count = 0
while count < 10:
print("カウントは", count, "です。")
count += 1
これは同じ処理ですね。表示される処理を数字だけでなく文字列と一緒に表示するようにしています。
実行すると同じように10回表示されるわけですが、これをbreakを使って途中でループを中止したい。
コードを次のように変えてみます。
count = 0
while count < 10:
if count > 5:
break
print("カウントは", count, "です。")
count += 1
whileの下に2行の条件文が追加されています。カウントが5を超えたならば、break処理を行うという意味です。
コードを実行してみましょう。(Atomで実行してみます。ファイル名は、while.pyとしています)
ループの処理がカウントが6になったところで中止されているのがわかります。このようにbreakを組み合わせるとループ処理を途中で完全に抜けることができるようになります。
continueで一旦処理を辞めて再度次のループ処理へ
breakでループ処理から完全に抜け出しましたが、抜け出すのではなくその処理だけ行わずに再び繰り返し処理に戻りたい場合があります。
これは、continueを使うことで処理することができます。
上のbreakで使ったコードを次のようにcontinueを組み合わせて変更してみます。
count = 0
while count < 10:
if count > 5:
break
if count == 3:
count += 1
continue
print("カウントは", count, "です。")
count += 1
コードの違いがわかるでしょうか。5行目から7行目が付け加えられています。カウントが3の時に処理をやめて先頭に戻ります。この時にカウントを一つ増やして次の処理ができるようにしています。
コードを実行するとこうなります。
breakのコードと比べると、continueで指定したカウントが3のときの処理が行われていないのがわかりますね。continueを組み合わせるとこのように処理をスキップするようなことができるわけです。
elseとbreak
whileのループ処理が終わったら何か別の処理を実行したい場合はelseと組み合わせます。
次のようにelse文を最後に付け加えるだけです。
count = 0
while count < 10:
print("カウントは", count, "です。")
count += 1
else:
print("ループ処理は完了しました。")
実行するとこうなります。
ループ処理が終了した後に、else文以下の処理になっているのがわかります。
では次のような場合はどうでしょうか。
count = 0
while count < 10:
if count > 5:
break
print("カウントは", count, "です。")
count += 1
else:
print("ループ処理は完了しました。")
breakの入った処理とelseを組み合わせています。breakでループ処理を抜けた場合にelse文の処理は行われるのかどうかということですね。
実行してみるとこうなります。
このようにbreakでループを抜けると、elseでの処理は実行されません。これはbreakは完全にループから抜け出すからです。
これはあまり使わないような処理ですけど、ループ処理をしてもbreak文が実行されない状況になった時などにbreakのチェックとして使ったりするようです。例えば、何かキーワードを探す処理をしたときに見つかった時はbreakし、見つからなかった時はelseで処理をするといったような場合です。
まとめ
Pythonで反復処理をするためのwhileについて学びました。whileに続けて条件文を書き、条件成立時の処理をインデントしたブロックで記述します。
反復処理が無限ループにならないように、ループカウンタを利用して処理を終了します。
breakと組み合わせるとループ処理を中止することができ、continueと組み合わせると処理を一旦スキップして再度反復処理に戻ることができます。
elseと組み合わせるとループ終了後の処理を指定できたり、break処理のチェックに利用できたりします。