Python の while 文による繰返し

処理を繰り返すためには、forwhile を利用します。ここではそのうち 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 します。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門