TL;DR
Python には for 文 と while 文 の 2 種類のループがある。while 文は条件を指定した処理の繰り返しである。式が真である間は処理を繰り返す。
while のポイント
while 条件式:
繰り返す処理
- 式が真である間は処理を繰り返す
- continue は次のループに移る処理
- break 文はループを抜けるときに使う
- else 節は、while ループが終了時に、対象が見つからなかったときに実行
- else 節は、 break 文でループを抜ける際は実行されない
- while ループが break せずに終了したとき、else 節に渡される
次に示すのは、1 から 5 までの数値を表示するシンプルなループである。
i = 1
while i <= 5:
print(i)
i += 1
# 1
# 2
# 3
# 4
# 5
上に記述したプログラムを順に解説する。
- i に 1 を代入する
- i が 5 以下ならループを続ける
- i を表示
- i を 1 ずつ インクリメント(変数の値を 1 増やす) する
- ループの先頭に戻り繰り返す
- i が 6 になり最初の行に戻ると i <= 5 が False になり終了する
次に示すのは、ユーザーが名前を入力するまで、入力を促すループである。
i = ''
while not i:
i = input('名前を入力してください : ')
print(f'おかえりなさい! {i} さん!')
# 名前を入力してください :
# 名前を入力してください : 花子
# おかえりなさい! 花子 さん!
break
break 文はループを抜けるときに使う。次に示すのは、input()関数を使い、キーボードの入力で stop が入力されるまで、先頭の文字を大文字に変換させる無限ループである。stop が入力されると break 文が返されループを抜ける。
while True の部分が無限ループになる。このループを終了させるには、ループ内に if 文を置いて、条件が満たされたら break 文を呼び出す。
while True:
s = input('何か入力してください : ')
if s == 'stop':
break
print(s.capitalize())
# 何か入力してください : abc
# Abc
# 何か入力してください : stop
continue
continue は次のループに移る処理である。ループを抜けるのではなく、次のイテレーション(反復処理の 1 回分)をすぐに再開したい場合は、continue を使う。現在の繰り返しをその時点で終了し、次の繰り返しの先頭にジャンプするものである。
次に示すのは、入力欄で、奇数の数値を入れると自乗し、偶数だとスキップされ、stop と入力すると終える処理である。
while True:
i = input('数字を入力してください : ')
if i == 'stop':
break
number = int(i)
if number % 2 == 0:
continue
print(number * number)
# 数字を入力してください : 2
# 数字を入力してください : 3
# 9
# 数字を入力してください : 4
# 数字を入力してください : 5
# 25
# 数字を入力してください : stop
else
else 節は、while ループが終了したものの、見つからなかったときに実行される。
i = 0
while i < 3:
print(f'{i}')
i += 1
else:
print('end')
# 0
# 1
# 2
# end
else と break
else は break 文でループを抜ける際には実行されない。while ループが break せずに終了したとき、else 節に渡される。
次に示すコードは、リストの要素数だけループを行い、要素に偶数があれば break、なければ else が返る。
numbers = [11, 83, 215, 899]
i = 0
while i < len(numbers):
n = numbers[i]
if n % 2 == 0:
print('偶数発見')
break
i += 1
else:
print('偶数が見つからない')
# 偶数が見つからない