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」は処理されないことが分かります。

コメント