while
このページでは豊富な例を用いてPythonのwhileの使い方を学ぶことができます。
whileはPythonの構文の1つです。
forと似た特徴があり、
与えた条件式が真(True)である限り記述した処理を繰り返し実行し続けます。
break
やcontinue
を用いることにより処理をスキップしたり中断させたりすることも可能です。
また、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.