ヘッダー
Python サンプル集
 

条件指定の繰り返し(while)

2022/12/4

→ C# のサンプルに切り替える → Visual Basic のサンプルに切り替える

 

無限に繰り返す

この例では、「こんにちは!」と出力してから1秒待つという処理を無限に繰り返します。

import time

while True:
    print('こんにちは!')
    time.sleep(1)

 

 

条件付きで繰り返す。条件は1周ごとに最初に判断する。

この例は、変数 i が 5 より小さい間処理を繰り返します。

i = 0
while i < 5:
    i += 1
    print(f'現在{i}周目です。')

実行すると下記の通り出力されます。

現在1周目です。
現在2周目です。
現在3周目です。
現在4周目です。
現在5周目です。

 

 

条件付きで繰り返す。条件は1周ごとに最後に判断する。

この例は、変数 i が 5 より小さい間処理を繰り返します。

i = 0
while i < 5:
    i += 1
    print(f'現在{i}周目です。')
    if not (i < 5):
        break

メモ:条件を最後に判断するための構文はありません。 (C# では do while、VBでは Do While でできます。)

実行すると下記の通り出力されます。

現在1周目です。
現在2周目です。
現在3周目です。
現在4周目です。
現在5周目です。

 

 

条件がFalseになった場合に1回だけ処理を実行する(else)

i = 0
while i < 3:
    i += 1
    print(f'現在{i}周目です。')
else:
    print('条件が False になったのでループはこれで終わります。')

メモ:もし、最初から条件が False の場合、ループ本体は実行されず、elseの処理だけが実行されます。

実行すると下記の通り出力されます。

現在1周目です。
現在2周目です。
現在3周目です。
条件が False になったのでループはこれで終わります。

 

 

途中でループから抜け出す(break)

この例では、while文の条件で 変数 i が 10より小さい限り繰り返す指定になっていますが、if 文で条件判断してi が 3 のときループを抜けます。

i = 0
while i < 10:
    i += 1
    if i == 3:
        break
    print(f'i = {i}')

print('終了')

実行すると下記の通り出力されます。

i = 1
i = 2
終了

 

この例は、摂氏(℃)と華氏(゜F)の対応表を出力します。「華氏が100度を超える」とbreakして終了します。

c = 0; #摂氏。日本で通常使用する温度の単位。℃。

while True:
    f = (9.0 / 5.0 * c) + 32 #摂氏(℃)から華氏(゜F)を算出。(華氏は主にアメリカで使用されます。)

    if f > 100:
        print('breakします。')
        break

    # >5.1f の意味は「5文字分の幅で右寄せして小数1桁」という書式指定。
    print(f'{c: >5.1f}℃ = {f: >5.1f}゜F')
    c += 10

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。(掲載の都合上スペースは省いています)

0.0℃ = 32.0゜F
10.0℃ = 50.0゜F
20.0℃ = 68.0゜F
30.0℃ = 86.0゜F
breakします。

 

 

ループがすべて完了したか確認する (たとえば、breakしていないかどうか)

この例では 変数 i が 9999 の場合 break します。ループの処理がすべて終わった後に break して終わったのか、break しないで終わったのかメッセージを出力します。 このまま実行すると i は 9999 にならないので break は発生しないで終了します。

i = 0
while i < 10:
    i += 1
    print(f'i = {i}')

    if i == 9999: #←ここを i == 2 などに変えると、最後のメッセージが表示されなくなります。
        break
else:
    print('breakしないでループを終了しました。') #←これが出力されます。

メモ:elseに記述した処理はwhileで指定した条件(この例では i < 10)が False と評価された場合に実行されます。そのため、(この例の場合で言うと while i > 10)のように最初から条件が False で1回も本体の処理が実行されない場合でも elseの処理は実行されます。

 

 

その周を中断し、次の周を開始する(continue)

if 文で条件判断して2周目と3周目であれば処理を中断して次の周を開始します。

i = 0
while i < 5:
    i += 1
    print(f'i = {i} 開始')

    if i == 1 or i == 2:
        continue

    print(f'i = {i} 終了')

実行すると下記の通り出力されます。

i = 1 開始
i = 2 開始
i = 3 開始
i = 3 終了
i = 4 開始
i = 4 終了
i = 5 開始
i = 5 終了

 

この例は、摂氏(℃)と華氏(゜F)の対応表を出力します。華氏が整数になる場合にだけ出力します。華氏が100度より下である限り繰り返します。

c = 0; #摂氏。日本で通常使用する温度の単位。℃。

while (f := (9.0 / 5.0 * c) + 32) < 100: #摂氏(℃)を華氏(゜F)に変換した値を変数fに代入し、それが100より下の場合処理を実行します。

    c += 1

    #f が整数でない場合、何もせず次の繰り返しにジャンプします。
    if (not f.is_integer()):
        continue

    # >5.1f の意味は「5文字分の幅で右寄せして小数1桁」という書式指定。
    print(f'{c - 1: >5.1f}℃ = {f: >5.1f}゜F')

実行すると下記の通り出力されます。(掲載の都合上スペースは省いています)

0.0℃ = 32.0゜F
5.0℃ = 41.0゜F
10.0℃ = 50.0゜F
15.0℃ = 59.0゜F
20.0℃ = 68.0゜F
25.0℃ = 77.0゜F
30.0℃ = 86.0゜F
35.0℃ = 95.0゜F

 

 

条件達成まで繰り返す。条件は1周ごとに最初に判断する。

この例は、変数 i が 5 になるまで処理を繰り返します。

i = 0
while not i == 5:
    i += 1
    print(f'現在{i}周目です。')

メモ:ループの終了条件を指定する特別な機能はありません。もし必要ならこの例のようにループの条件を not で反転させるなどすることになります。

実行すると下記の通り出力されます。

現在1周目です。
現在2周目です。
現在3周目です。
現在4周目です。
現在5周目です。

 

 

条件達成まで繰り返す。条件は1周ごとに最後に判断する。

この例は、変数 i が 5 になるまで処理を繰り返します。

i = 0
while True:
    i += 1
    print(f'現在{i}周目です。')
    if i == 5:
        break

メモ:条件を最後に判断するための構文はありません。 (C# では do while、VBでは Do While でできます。)

実行すると下記の通り出力されます。

現在1周目です。
現在2周目です。
現在3周目です。
現在4周目です。
現在5周目です。

 

 

5回繰り返す

i = 0
while i < 5:
    i += 1
    print(f'現在{i}周目です。')

メモ:この例のように単純に回数を指定して繰り返すには for の方が適しています。

実行すると下記の通り出力されます。

現在1周目です。
現在2周目です。
現在3周目です。
現在4周目です。
現在5周目です。

 

 

条件判断と同時に変数に代入する

次の例は、1~6のランダムな数値を生成します。6が生成されると何もせず終了します。

import random

i = 0
while (i := random.randint(1, 6)) <= 5:
    print(i)

 

 

参考:プログラミング言語ごとの条件付きループの比較

方法 Visual Basic C# Python
条件の省略 Do で可能。
省略すると無限ループします。
不可 不可
ループ先頭での条件判断 Do と While で可能 while で可能 while で可能
ループ最後での条件判断 Do で可能 do で可能 不可
条件が false と評価された
場合に実行する処理の記述
不可 不可 else で可能
ループを継続する条件の記述 Do と While で可能 do と whileで可能 while で可能
ループを終了する条件の記述 Do で 可能
(Untilを使う)
不可 不可
ループの終了 Exit Do または Exit While で可能 break で可能 break で可能
次の周へのジャンプ Continue Do または
Continue While で可能
continue で可能 continue で可能
条件判断と代入を
組み合わせと記述
不可 = で可能 := で可能

この表は言語に用意されている機能を表現しています。「不可」となっている部分の多くはロジックを自作することで実現は可能です。