27: break, continue, else 文を使ってループを中断、飛ばす、終了時に特定の処理を行う

前回の続きです。

次にwhile, for共通の処理について見ていきます。

共通処理は以下の3つです。

  1. braekキーワードでループを終了させる。
  2. continueキーワードで、ループ処理を一回スキップしてブロックの先頭に戻る。
  3. ループ終了時にelseを使って何か処理をする。

まずbreakから見ていきますが、最初はbreakを使わないときの挙動を確認してください。以下のコードは0から98までの値をループできるというものです。

for _ in range(99):
    print(_)

余談ですが、ループ中のアンダーバーというのはちょっと特殊な意味を持っています。

このループの中だけで使う使い捨て変数ですよと言うような表明になります。

また、このrange関数については、本書ではあまり詳しく解説しませんが、0から98までが入ったリストのようなものと捉えておいてください。

break

ここでbreakを使うとループ途中でも強制終了させることができます。

for _ in range(99):
    if _ == 10:
        break
    print(_)

print("ループを抜けました")

上記の例だと、アンダーバーが10になったらループ終了です。

アンダーバーの中には99まで数字が格納されています。しかし、if文で _ ==10 になったらbreakという処理でループを抜けています。実行すると9まで表示されたところで終了になります。

breakを使うと、ループをその時点で終了させます。forでやっていますがwhileでも使うことができます。

continue

次はcontinue。continueはループ処理を一回スキップするという機能です。

まずはrangeの100とすると0から99までループできるんですが、奇数だけ表示するということをやってみます。以下のようにすると0から99までの値が取り出されます。

for _ in range(100):
    print(_)

奇数だけ表示したい場合は以下のようにします。

for _ in range(100):
    if _ % 2 == 0:
        continue
    print(_)

このコードを解説すると最初、_は0ですね。0なのでこのcontinueに入ってきます。continueに入ると次のループに行きます。print(_)には到達しません。(% は剰余を求める演算子です)

次は1ですね。1は条件に合致しませんのでcontinue二は到達しません。次の処理、print関数で1という値が表示されます。

そして次の2のあまりは0ですから、continueでスキップされます。

3は、continueに到達しないので print(_) が実行されます。4はcontinueに到達しますので次のループに行きます。

こんな感じで延々と繰り返して99まで実行するのがこのコードです。このようにcontinueを使うとループを一回スキップしてという処理を行います。

次は、「レアガチャだけprintする」というものを作成します。

gacha_list = ["common", "rare", "common", "common", "super rare", "common"]
for gacha in gacha_list:
    if gacha == "common":
        continue
    print(gacha)

commonの場合はcontinueでスキップしてそうでなければprintでgachaを表示するということをします。

実行するとrareとsuper rareだけ表示されます。commonの時はスキップするということですね。

else

最後にループ終了時に何か処理をするelseというものを見てみます。

gacha_list = ["common", "rare", "common", "common", "super rare", "common"]
for gacha in gacha_list:
    if gacha == "common":
        continue
    print(gacha)
else:
    print("ループ終了")

このようにするとループ終了時にelseの中に入っていきます。普通にループを終了させた場合、必ずelseを通ります。

1点注意点がありまして、breakで処理を抜けるとこのelseは実行されません。

例えばこのcontinueの場所をbreakに置き換えると、ループから抜け出してしまいます。

gacha_list = ["common", "rare", "common", "common", "super rare", "common"]
for gacha in gacha_list:
    if gacha == "common":
        break
    print(gacha)
else:
    print("ループ終了")

breakを使うとelseには到達しませんのでご注意ください。

ここまでbreak, continue, elseを見てきましたが、forだけでなくwhileでも使えます。

以下のコードは、もし2で割り切れるならbreakでループを抜けプログラムを終了します。こんなこともできるわけですね。

num = 0
while True:
    print(num)
    num += 1
    if num % 2 == 0:
        break

ここまでのまとめです。

while, for共通の処理としてbreakを使います。ループをその時点で終了させることができます。

continueを使うと、ループを一回スキップするという動きになります。

ループ終了時に何か処理をするにはelseを使います。ただし、注意点として、ブレイクで終了させるとこのelseには到達しませんのでご注意ください。

反復処理まとめ

反復処理についてはこれでおしまいです。お疲れさまでした。

反復処理は、プログラミングでは必ず登場する概念です。

プログラミングすると、人間が作業するよりも速く処理できます。しかも大量に処理できます。その一端を担っているのがこの反復処理です。

どういうものを反復できるかというと、反復処理には2種類あります。

1つは複数のデータを格納できるリスト型などの要素を一個一個取り出して処理していくfor文。

例えば出荷待ちの車をベルトコンベアーで1台ずつ出荷するといった感じです。そういうイメージでリスト、タプル、辞書の値を取り出せます。

もう一つ、ある条件が成り立っている間、処理を繰り返すwhile文というものがあります。こちらは指定した温度に達するまで動き続けるエアコンといったイメージです。

このように反復処理、イテレートには2種類あります。

そしてfor, whileの共通処理としてbreakでループを終了させる、continueで処理を一回スキップする。そしてelseでループ終了時に何か処理をすると、言うものがあります。

これらの要素を組み合わせてアプリケーションを作っていきます。

ひとつひとつの要素はそこまで複雑ではないと思います。しかし、こういう単純なものの組み合わせから複雑なものが成り立っています。

単純な部品ネジとかボルトとかナットとか、そういうイメージの単純な部品をどのように組み合わせれば所望の機能を実現できるか考える。

これがエンジニアの醍醐味かと思います。そのためには、土台の部分、部品一個一個の特性を覚えておく必要があります。

ぜひ何度も練習して部品の特性を覚えておきましょう。