言語バージョン 3.9.0

公開日 2020年11月15日 JST

更新日 2020年12月10日 JST

コード例の出力としてprint関数を使用しています。

使用方法がわからない場合は以下のページを参照してからコード例を確認してください。

print関数の使用方法

while

このページでは豊富な例を用いてPythonのwhileの使い方を学ぶことができます。

whileはPythonの構文の1つです。
forと似た特徴があり、 与えた条件式が真(True)である限り記述した処理を繰り返し実行し続けます。

breakcontinueを用いることにより処理をスキップしたり中断させたりすることも可能です。
また、elseを使用することができ、breakで中断したとき以外のwhile文の処理の後に実行する処理を記述すること出来ます。

TL;DR

基本

index1 = 1
while index1 < 10:
    print(index1, end=' ')
    index1 += 1
==> 1 2 3 4 5 6 7 8 9




sum1 = 0
while sum1 < 100:
    sum1 += sum1 + 1
print(sum1)
==> 127




list1 = ['Python', 'Lisp', 'Smalltalk', 'COBOL']
index2 = 0
dict1 = {}
while index2 < len(list1):
    dict1[index2] = list1[index2]
    index2 += 1
print(dict1)
==> {0: 'Python', 1: 'Lisp', 2: 'Smalltalk', 3: 'COBOL'}




tuple1 = ('python', 'python', 'python', 'python', 'java')
index3 = 0
while tuple1[index3] == 'python':
    print(tuple1[index3], end=' ')
    index3 += 1
==> python python python python

処理のスキップ(continue)

index1 = 0
while index1 < 10:
    index1 += 1
    if index1 % 2 == 0:
        continue
    print(index1, end=' ')
==> 1 3 5 7 9




index2 = 0
while index2 < 55:
    index2 += 1
    continue
    # continueが先に評価されるので次のprintは実行されない
    print('Never Executed')
print(index2)
==> 55

処理の停止(break)

index1 = 0
while index1 < 5:
    print(index1)
    break
    # breakが先に評価されるので次の命令は実行されない
    index1 += 1
==> 0




index2 = 0
while index2 < 10:
    index2 += 1
    if index2 == 5:
        break
    print(index2, end=' ')
==> 1 2 3 4




dict1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
index3 = 1
while index3 < len(dict1):
    print(dict1['key' + str(index3)], end=' ')
    if 'key' + str(index3) == 'key3':
        break
    index3 += 1
==> value1 value2




while True:
    print('Python')
    break
==> Python

すべて繰り返された場合の処理(else)

index1 = 0
while index1 < 3:
    print(index1)
    index1 += 1
else:
    print('All is done!')
==> 0
==> 1
==> 2
==> All is done!




# continueの場合はelseの処理が実行されます
index2 = 0
while index2 < 10:
    index2 += 1
    if index2 % 2 == 0:
        continue
    print(index2)
else:
    print('All is done!')
==> 1
==> 3
==> 5
==> 7
==> 9
==> All is done!




# breakの場合はelseの処理が実行されません
index3 = 0
while index3 < 10:
    index3 += 1
    if index3 == 2:
        break
    print(index3)
else:
    print('All is done!')
==> 1

解説

基本

whileの後ろに条件式(bool型を返す式)を記述します。
while文の中に記述された処理は条件式がTrueの間は実行され続けます。

無限ループは計算機に多大な負荷をかけてしまうので、実際のプログラムでは起こさないように気をつけてください。

index1 = 0
while index1 < 3:
    print('while')
    index1 += 1
==> while
==> while
==> while




number1 = 10
while number1 > 2:
    number1 -= 1
print(number1)
==> 2

処理のスキップ(continue)

forと同じようにcontinueを使用することで処理をスキップさせることが出来ます。 (for文でのcontinue使用方法

ループ処理の中でcontinueが評価されると、それ以降に記述された処理は同じループ中にはスキップされます。

次に説明するbreakとの挙動の違いに注意して使用してください。

index1 = 0
while index1 < 3:
    print(index1)
    index1 += 1
    # continue以降の処理はスキップされ実行されない
    continue
    print('skipped!')
==> 0
==> 1
==> 2




index2 = 0
while index2 < 10:
    index2 += 1
    # index1が3の倍数の場合表示しない
    if index2 % 3 == 0:
        continue
    print(index2, end=' ')
==> 1 2 4 5 7 8 10

処理の停止(break)

forと同じようにbreakを使用することでループ処理を停止させることが出来ます。 (for文でのbreak使用方法

breakが評価されるとすべての繰り返し処理が行われていなくとも、breakが評価された瞬間にwhile文の処理は実行されなくなります。

前項のcontinueとの挙動の違いに注意して使用してください。

index1 = 0
while index1 < 10:
    if index1 > 2:
        break
    print('Python' + str(index1))
    index1 += 1
==> Python0
==> Python1
==> Python2




while True:
    print('This is the last output.')
    break
==> This is the last output.

すべて繰り返された場合の処理(else)

Pythonのwhileはforと同じようにelseを使用することが出来ます。 (for文でのelse使用方法

whileとelseを使用すると、繰り返し処理がすべて完了した場合(0回の繰り返しの場合を含む)にelseで指定した処理が実行されます。

breakで処理が中断した際にはelseの処理は実行されません。
continueでスキップされた場合にはelseの処理は実行されます。

index1 = 0
while index1 < 2:
    print('OK')
    index1 += 1
else:
    print('All is done!')
==> OK
==> OK
==> All is done!




while True:
    print('LAST output.')
    break
else:
    print('This is NEVER executed.')
==> LAST output.

1次情報

その他の制御フローツール - Pythonドキュメント