for
と while
について基本的な使い方は前回、勉強しました。しかし例外的な対応が必要になるのが世の常です。
continue で繰り返しを途中で飛ばしてみる
「continue
」を使うと for
と while
で処理を繰り返している途中で、次のループまで飛ばすことができます。簡単な例として「0 〜 10 を表示するプログラムの途中、3 だけをすっ飛ばす」処理を書いてみましょう。
for r in range(5): print('-- start --') if r == 3: # r が 3 の場合は continue を実行する continue # continue の後、プログラムがどう進むかデバッグで確認しましょう print(r) print('-- end --') print('fin...')
n = 0 while n < 5: print('-- start --') if n == 3: # r が 3 の場合は continue を実行する n += 1 # これを忘れると無限ループになっちゃうよ! continue # continue の後、プログラムがどう進むかデバッグで確認しましょう print(n) n += 1 print('-- end --') ## 「n += 1」を 2 回も書くのは無駄…… ## でも、1 回で済ませようとするとプログラムが分かりづらくなる。 ## こういう場合は、多少無駄があっても分かりやすい方を選択しましょう # n = -1 # while n < 4: # print('-- start --') # n += 1 # if n == 3: # r が 3 の場合は continue を実行する # continue # continue の後、プログラムがどう進むかデバッグで確認しましょう # print(n) # print('-- end --') print('fin...')
break で全部、すっ飛ばしてみる
「break
」を使うと、続く処理をすっとばしてループの外に出ることができます。先程のプログラムにある「continue
」を「break
」に書き換えて見ましょう。
for r in range(5): print('-- start --') if r == 3: # r が 3 の場合は break を実行する break # break の後、プログラムがどう進むかデバッグで確認しましょう print(r) print('-- end --') print('fin...')
n = 0 while n < 5: print('-- start --') if n == 3: # r が 3 の場合は break を実行する n += 1 # break # break の後、プログラムがどう進むかデバッグで確認しましょう print(n) n += 1 print('-- end --') print('fin...')
VS Code でデバッグして確認する
Python の拡張機能を入れてあるので、今のままでデバッグできるようになっています。デバッグするとプログラムの流れが分かりやすいので、確認の際には重宝します。
VS Code では以下の手順で実行します。
- プログラムを止めたい行にブレークポイントを設定する(復数可)
- アクティブバーの「」ボタンをクリックしてデバッグを開始する([F5] 押下でも可)
- ブレークポイントで止まったら次のアクションを選択する
- 次のブレークポイントまで処理を進める。次のブレークポイントがない場合は最後まで処理を進める
- 現在の行を実行して次の行へ進む
- 現在の行を実行して次の行へ進む。ただし現在の行が関数呼び出しである場合、その内部へ進む
- 現在の関数の外へ進む。ただし関数の内部にいない場合は、「続行」と同様
画面下部では、デバッグ実行のため、普段のプログラム実行時とは違ったコマンドが表示されています。
実は else も使えるよ!
「if
」で登場した「else
」ですが、実は「for
」「while
」でも使えます。これは Python 独特の仕組みだと思います。今回のスロットゲーム中では使用していませんし、私自身がコレを目にした記憶もありません……。この機会に頭の片隅においておきましょう。
「continue
」「break
」を併用した場合に、どの様な挙動になるのかは是非、デバッグにて確認してみてください。
print('---------- normal') for r in range(5): print(r) else: print('else 1') print('else 2') print('---------- with continue') for r in range(5): if r == 3: continue print(r) else: print('else 1') print('else 2') print('---------- with break') for r in range(5): if r == 3: break print(r) else: print('else 1') # break の場合だけ実行されない! print('else 2') # break の場合だけ実行されない!
print('---------- normal') n = 0 while n < 5: print(n) n += 1 else: print('else 1') print('else 2') print('---------- with continue') n = 0 while n < 5: if n == 3: n += 1 continue print(n) n += 1 else: print('else 1') print('else 2') print('---------- with break') n = 0 while n < 5: if n == 3: break print(n) n += 1 else: print('else 1') # break の場合だけ実行されない! print('else 2') # break の場合だけ実行されない!
ブレークポイントは任意の個数、設定することができます。デバッグで「続行」を使用すると、次のブレークポイントまで進みます。23 行目のブレークポイントで止まることなく処理が終了していることからも、「break
」を実行すると「else
」は処理されないことが分かります。
コメント