Python サンプル集 |
Visual Basic 中学校 > Python サンプル集 > 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
実行すると下記の通り出力されます。(掲載の都合上スペースは省いています)
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 で可能 |
条件判断と代入を 組み合わせと記述 |
不可 | = で可能 | := で可能 |
この表は言語に用意されている機能を表現しています。「不可」となっている部分の多くはロジックを自作することで実現は可能です。