Python の while 文による繰返し
処理を繰り返すためには、for や while を利用します。ここではそのうち while について説明します。
while は条件が真である間、処理を繰り返すものです。while によるループ
「Python の for 文による繰返し」では、for ループを見てきました。
ここでは異なるタイプのループをみてみましょう。while ループと呼ばれるものです。
while は条件式が真である間、処理が繰り返されます。 for と違い、必ずしもコレクションは必要ではありません。
i = 0
while i < 3:
print(i, end=" ")
i += 1 # i に1を足す
これを実行すると次のようになります。
0 1 2
1行目で i は 0 に初期化され、2 行目からのループに入ります。このとき i は 0 であり、 3 より小さいので 3 行目と 4 行目が実行されます。3 行目では i の値が出力され、 4 行目では i に 1 が加えられて 1 になります。
繰り返しのステートメントブロックは 3行目と4行目だけですから、また 2 行目の条件判定を行います。
これを i < 3 つまり 「iが 3 より小さい」間繰り返します。
break 文で while ループから抜ける
while ブロックの中で break と書くそこで while ループが終了します。
i = 0
while i < 3:
print(i, end=" ")
i += 1
if i == 1:
break # ループを終了
この実行結果は次の通りです。
0
この例では i が 1 になると break としているので、while ブロックを抜けます。
continue 文で while ブロックを中断しループを続ける
while 文によるループにおいて、while ブロックの処理を中断して次のループに行くには continue 文を書きます。
例えば、九九の掛け算の表で 1, 3, 4, 7 の段を除くとしたら、次のようにできます。
i = 0
while i < 9:
i += 1
# i が 1, 3, 4, 7 の場合
if i == 1 or i == 3 or i == 4 or i == 7:
continue # ここで中断
j = 0
while j < 9:
j += 1
print(f"{i * j:>4d}", end="")
print()
for 文を使って九九の掛け算の表を書いた例は「Python の for 文による繰り返し」をみてください。
この実行結果は次のようになります。
2 4 6 8 10 12 14 16 18
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
確かに 1, 3, 4, 7 始まりの行は表示されていません。
while ループの else
while 文でも for と同様に else ブロックが使えます。
i = 0
while i < 3:
print(i, end=" ")
i += 1
else:
print(f"[ELSE i={i}]")
このように while ブロックに続けて else ブロックを書くと、while が条件を満たさなくなり、 ループを終了したときに else ブロックが実行されます。
この実行結果は次のようになります。
0 1 2 [ELSE i=3]
明示的に break で while ループを抜けた場合は、else ブロックは実行されません。
Python には do-while ループはない
他の言語ではよく、次のようなループ構造があります。いわゆる do-while ループと呼ばれるものです。
// Python ではない do { ... } while(条件)
Python では do-while ループはありません。
もし同様のループを行うのであれば、while True: として処理を開始して、必要なタイミングでループを break します。