while文は、指定した条件がTrueである間、処理を繰り返し実行する構文です。for文が「決まった回数の繰り返し」に適しているのに対し、while文は「条件が満たされるまで繰り返す」場合に適しています。
この記事では、while文の基本構文から、無限ループ、break・continueの使い方まで詳しく解説します。
基本的な使い方
while文は while 条件式: の形で書きます。条件式がTrueの間、ブロック内の処理が繰り返し実行されます。
Python
# カウントアップ
count = 0
while count < 5:
print(f"count = {count}")
count += 1
print("ループ終了")
実行結果
count = 0
count = 1
count = 2
count = 3
count = 4
ループ終了
無限ループに注意
条件が永遠にTrueのままだと、プログラムが終了しません。ループ内で必ず条件を変化させる処理(カウンタの更新など)を入れましょう。もし無限ループに陥った場合は、Ctrl+Cで強制終了できます。
whileとbreakの組み合わせ
while Trueで無限ループを作り、breakで脱出するパターンは非常によく使われます。
Python
# ユーザー入力を繰り返し受け付ける
# (実行例をシミュレーション)
commands = ["hello", "world", "quit"]
index = 0
while True:
command = commands[index] # 入力の代わり
index += 1
if command == "quit":
print("終了します")
break
print(f"入力: {command}")
実行結果
入力: hello
入力: world
終了します
continueでスキップ
continueを使うと、現在の繰り返しの残りをスキップして、次の繰り返しに進みます。
Python
# 奇数のみ表示
num = 0
while num < 10:
num += 1
if num % 2 == 0:
continue
print(num, end=" ")
実行結果
1 3 5 7 9
while-else文
Pythonのwhile文にはelse節を付けることができます。ループが正常に終了した(breakしなかった)場合にelseブロックが実行されます。
Python
# breakなしで終了 → else実行
count = 0
while count < 3:
print(count)
count += 1
else:
print("正常に終了しました")
print("---")
# breakで終了 → else実行されない
count = 0
while count < 3:
if count == 1:
print("breakで中断")
break
print(count)
count += 1
else:
print("この行は実行されません")
実行結果
0
1
2
正常に終了しました
---
0
breakで中断
for文とwhile文の使い分け
繰り返し回数が事前に決まっている場合はfor文、条件によって繰り返し回数が変わる場合はwhile文を使うのが基本です。リストや辞書の要素を処理するならfor文、ユーザーの入力待ちやゲームのメインループならwhile文が適しています。
実践的な使い方
Python
# 数当てゲーム(シミュレーション)
import random
answer = 42 # 正解
guesses = [20, 60, 42] # プレイヤーの入力
attempts = 0
for guess in guesses:
attempts += 1
if guess == answer:
print(f"正解! {attempts}回目で当たりました!")
break
elif guess < answer:
print(f"{guess}: もっと大きい数です")
else:
print(f"{guess}: もっと小さい数です")
実行結果
20: もっと大きい数です
60: もっと小さい数です
正解! 3回目で当たりました!
まとめ
while 条件式:で条件がTrueの間繰り返し処理ができる- 無限ループを避けるため、ループ内で条件を変化させる
while True+breakのパターンがよく使われるcontinueで現在の繰り返しをスキップできる- 繰り返し回数が決まっているなら
for文、条件次第ならwhile文