Pythonでプログラミングで繰り返し処理を実施している時、「繰り返しの途中で処理をスキップしたり、繰り返しを終了したい」なんて場合があります。
繰り返し処理をスキップしたり、終了するにはcontinueやbreakを使用します。
そこで、今回はPythonにおけるcontinueやbreakの使い方について、やさしく解説していきたいと思います。
【基礎】continueの使い方
【基礎】breakの使い方
【発展】多重ループの中でのbreak-continueの使い方
【発展】passとcontinueの違いについて
この記事では基礎から実践的な内容に関してわかりやすく解説していきます。
※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
continueとは
みなさんはcontinue文を使ったことがありますか?
そもそも、continueが何か知っていますか?
continueとは、主にループ内で使用する構文です。
残りの処理をスキップし、次のループ処理に移りたいときに使うのがcontinue文です。
イメージとしては、ブロックの先頭に戻って処理を続けるという感じです。
continueの使い方
では実際にcontinue文を使用し、理解を深めていきましょう。
continue文は主にループ内で使用するものなので、forループとwhileループの両方での使い方をご紹介したいと思います。
for文の中でのcontinueの使い方
forループ内でcontinue文を使う簡単なサンプルコードをご用意しました。
以下をご覧ください。
for i in range(0,3): if i == 1: continue print(i)
出力結果は以下の通りです。
0 2
このサンプルコードではcontinueを使って、iが1の時に処理をスキップさせました。
スキップさせた処理は、数字の出力(print関数)です。
見てわかるように、print関数で表示されたのは0と2のみです。
1がスキップされて、表示されていないのがわかります。
while文の中でのcontinueの使い方
ではwhileループでもcontinue文を使用してみましょう。
以下のコードをご覧ください。
i=0 while (i < 3): if i == 1: i = i+1 continue print(i) i = i+1
出力結果は以下の通りです。
0 2
上のサンプルコードでは、先ほどのforループを使用したコードと同じように、0から2までの数字を1をスキップして表示させています。
ここで注意したいのは、continue文はループの先頭に戻る働きがあるということです。
その為、次のステップ処理(iが次の値の時の処理)を行いたいのなら、if条件文内にもインクリメント(i = i+1)を行う必要があります。
もし、if i == 1 continue のようにインクリメントを忘れてしまうと、変数 i が加算されないままプログラムは永遠にif文に入り、continue文に出会い、ブロックの先頭に戻る、という作業を繰り返してしまいます。
なので、continue文を使う時はそれに伴うif条件などにも注意を払いましょう。
breakとは
breakとは、任意の部分でforループやwhileループなどを抜け出したい時に使用します。
break文を使用すると、好きなところで処理を中断してループを抜け出すことが出来ます。
continue文は残りの処理をスキップしブロックの先頭に戻りますが、break文は完全にループから抜け出すことが可能です。
breakの使い方
では、実際にbreak文を使ってみましょう。
break文はcontinue文とセットで扱われている事が多いので、一緒に覚えておくと便利です。
では、以下のコードをご覧ください。
for i in range(10): if i == 7: print("Breaked!") break if i == 3: continue print(i)
出力結果は以下の通りです。
0 1 2 4 5 6 Breaked!
このコードでは、変数 i の値が7であればbreak文を使いループから抜け出し、変数 i の値が3であればcontinue文を使いループの先頭に戻ります。
その他の数字の場合は、print関数を使用し出力します。
実行結果から分かる通り、0から6までの3を除いた数字が出力されました。
そして、6のすぐ下には「Breaked!」という文字列が出力されました。
実際、7、8、9の数字は出力されていません。
多重ループの中でのbreak-continueの使い方
このセクションでは、少し応用的な内容にも触れてみましょう。
「多重ループ」は、ループの中にループがある状態をいいます。
break文は1つのループを抜けるための構文です。
その為、2重のループを一気に抜ける為には2つbreakを使用します。
以下のコードをご覧ください。
for i in range(5): for j in range(5): print(i,j) if j==3: print("Breaked!") break else: continue break
出力結果は以下の通りです。
0 0 0 1 0 2 0 3 Breaked!
上のコードでは、2重ループを作成し、break文とcontinue文の両方を使用しました。
変数 j の値が3になれば2つのループを同時に抜け出せる仕組みになっています。
これは、for文の後ろについたelseのコードブロックが「for文がbreakで終了したときには実行されない」という機能を利用しています。
実際、jが3以下である場合は正常に二つの数字が出力されています。
jが3になると、「Breaked!」が出力され、中のループから抜けます。
そして、二つめのbreak文が作動し、外のループからも抜けることが出来るのです。
このように、多重ループを一気に抜ける方法を実装しました。
passとcontinueの違いについて
continueと混同されるものにpassがあります。
passは何もしない文です。
この文は本当に何もしないので、continueのように文が発動したときにループ処理をステップするような機能はありません!
実際にサンプルコードで使用してみましょう。
以下のコードをご覧ください。
まずはpassを使用した例です。
for i in range(5): print(i) if i == 3: pass print("Hello")
出力結果は以下の通りです。
0 1 2 3 Hello 4
上のコードでは、0から4までの数字を出力します。
変数 i の値が3になると、passが発動します。
pass文は「何もしない」と命令するので、何も起きません。
そして次の処理である文字列Helloの出力に進みます。
では次に、continueを使った例です。
for i in range(5): print(i) if i == 3: continue print("Hello")
出力結果は以下の通りです。
0 1 2 3 4
上のコードでは、先ほどのサンプルコードと同じ仕組みになっています。
pass文の代わりにcontinue文が使用されています。
実際、continueは「何もしない」のではなくループの先頭に戻るので、文字列Helloは出力されないままです。
まとめ
今回はPythonの基本的なcontinueの使い方と、その応用について解説しました。
覚えておきたいポイントは
・continueはbreakとセットで使おう!
・1つのループに1つのbreak文を使おう
・passは何もしない、continueはループ先頭に戻る
こんな感じですね。
continueやbreakは、ループ処理などではとても便利な構文です。
この記事を通して、ご自身でも試して理解を深めてくださいね。