LoginSignup
5
4

More than 5 years have passed since last update.

for,continue,break 繰り返し処理の流れをPython3で説明ーその1

Posted at

プログラミング始めて簡単なfor文やwhile文は何とか書けるようになったけど、、、

continue文?break文?どうやって使うんだ??
2重ループ??3重ループ??それにif文くわえると処理順序どうなるの???

と行き詰まってしまった私の学習録です。

第1回は1重ループ(for、if、continue、break文)についてです。最後におまけで2重ループが少しだけ出ます。
(2重、3重ループも書こうと思ったら長くなりすぎたので次回にします。汗)

なお、以下のプログラム全てに、コードの読み取りの流れがわかりやすいように左側に番号を打ちました。
プログラムの動作の確認をされたい方はお手数ですが自分で打ち込んでください。
手間ですが良い勉強になりますよ。(私も確認しながらやってますよ。でも間違ってたらすいません汗)

1重ループ

1.1 for 文

01 for i in range(4):
02     print(i)

実行結果

0
1
2
3

まずは簡単な for だけの文から。
上のプログラムを実行すると1→2→1→2→1→2→1→2という処理を繰り返しているとわかります。(以後 → 省略)
処理の順番:12121212

1.2 for + if 文

1 for i in range(4):
2     if i < 2:
3         print(i)

実行結果

0
1

123123と行きます、しかし i = 2 になり 2でi < 2 == False になるので 3 の処理が実行されません。その次のi = 3のときも同じです。
処理の順番:1231231212

ではここに else 文がある場合はどうでしょうか?

1.3 for + if + else 文

1 for i in range(4):
2     if i < 2:
3         print(i)
4     else:
5         print('a')

実行結果

0
1
a
a

途中までは同じですが先ほど3の処理が実行されなかった所で1に戻らず45と続きます。
処理の順番:12312312451245

次はelseの代わりにcontinue文を入れます

1.4 for + if + continue 文

1 for i in range(4):
2     if i < 2:
3         print(i)
4         continue
5     print('a')

実行結果

0
1
a
a

プログラムは違うのに同じ実行結果になりました。(書いた本人もびっくり!?)
ただし処理の順番が違います。
continue 文は実行されると continue 文以下の繰り返しをスキップします。上のプログラムの場合は5のprint('a')が実行されません。
処理の順番:12341234125125

ちなみに上のプログラムの continue 文だけを削除するとどのような実行結果になるでしょうか?
これはおまけです。よかったら考えたり、自分でプログラムを動かしてみて下さい。

1.4おまけ continue 文を削除すると...

1 for i in range(4):
2     if i < 2:
3         print(i)
4     print('a')

実行結果

0
a
1
a
a
a

いかがでしたか、予想通りでしたか?
1.4では continue 文によりスキップされていたprint('a')が常に実行されてしまいました。
このように continue 文は、ある条件下で未処理にしたいプログラムがあるときに便利だということがよくわかりました。
処理の順番:12341234124124

1.5 for + if + break 文

1 for i in range(4):
2     if i < 2:
3         print(i)
4         break
5     print('a')

実行結果

0

次は break 文です。1.4の continue 文を break 文に変えただけです
1.4と比べて実行結果が大分変化しました。123まで進行して4の break 文を実行するとループ処理が強制終了になります。
ですので本来4回ループするはずが1回で終わってしまいました。
処理の順序:1234

最後におまけとして2重ループで break 文があるとどうなるか紹介して終わりにします。

1.5おまけ1 2重ループ(for + if 文)

1 for i in range(4):
2     if i < 2:
3         print(i)
4         for j in range(2):
5             print(j+10)

実行結果

0
10
11
1
10
11

まず基本的な2重ループの確認です。1のfor i in range(4):の for 文の内側にさらに
4のfor j in range(2):のfor 文がある場合です。
処理の順序は123まで行き4545となり、そこでまた1へと戻ります。

つまり内側のループ処理を全て終わらせてから外側のループ処理に戻るということです。

そして今までと同様に2でi < 2 == Falseになると3が実行されません。
処理の順序:12345451234545121212

では次は本題の2重ループに break 文がある場合です。

1.5おまけ2 2重ループ(for + if + break 文)

1 for i in range(4):
2     if i < 2:
3         print(i)
4         for j in range(2):
5             print(j+10)
6             break

実行結果

0
10
1
10

先ほどの2重ループ文の最後に break を加えただけです。break 文が外側のループにある場合は1.5と同じ結果になるので内側の for 文に入れました。

先ほどと同じように12345まで行き6で break 文を実行、すると break 文は
内側のループ処理を強制終了させます。

次に外側のループに戻り同じく123456と進み1に戻ります。
そして2でi < 2 == Falseになると3が実行されません。
処理の順序:1234561234561212

最後に

この記事を読んでくださりありがとうございました。少しでも役立てば幸いです。
初めての記事でしたので読みづらいところが多々あったかもしれません、その場合はよろしければコメントで教えてください。次回の反省に繋がりますので大変助かります。

実は while 文についても書くつもりでしたが、
' for 文とあんまり変わんないよな、書かなくていっか'
と思い書いておりません。勉強不足ですいません汗

' for 文と while 文の使い分けには、この引用を参考にしろ!もっと勉強しないさい!!'
というツッコミ大歓迎です。是非お願い致します。

この記事は以下のサイトさまを参考にしております。

http://www.yamamo10.jp/yamamoto/comp/Python/loop/index.php

5
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4