Pythonで繰り返し処理を書くとき、必ず登場するのが「forループ」と「whileループ」です。どちらも同じように見えますが、実際には役割が大きく異なります。この違いを理解せずに使っていると、コードが読みにくくなったり、思わぬバグを生む原因になります。
この記事では、それぞれの特徴を比較しながら「どの場面でどちらを使うべきか」を具体例とともに解説していきます。
Pythonの導入についてはこちら。
Python入門:最初のプログラムを作って実行する方法 – Lean Data Office
Python環境構築のやり方|初心者向け完全ガイド – Lean Data Office
forループの基本
forループは「繰り返す回数が決まっている処理」に強い構文です。リストやrangeなど、あらかじめ回数や要素が確定している場合に使います。t
for i in range(5):
print(f"{i}回目の処理")

このコードは5回だけ繰り返されます。開始から終了までが明確なので、意図しない無限ループになる心配はほとんどありません。
また配列やリストとの相性も良く、データ処理では非常に多用されます。
items = ["apple", "banana", "orange"]
for item in items:
print(item)

このように、forループは「安全で読みやすい」という点が大きな特徴です。
whileループの基本
一方のwhileループは、「条件が満たされている間はずっと繰り返す」構文です。
count = 0
while count < 5:
print(count)
count += 1

このコードでは、countが5未満である限りループが続きます。forループと違い、「終了条件」を自分で管理する必要があります。
この自由度の高さがメリットでもあり、同時に危険でもあります。更新処理を忘れると、ループが永遠に終わらなくなることがあります。
待ち時間処理
forループとwhileループの違いが最も分かりやすいのは、「終了タイミングが事前に分からない処理」です。
例えば「現在時刻から3秒後まで待つ」処理を考えてみます。
from datetime import datetime
start = datetime.now().second
target = (start + 3) % 60
while datetime.now().second != target:
pass
print("時間になりました")

ここでは終了回数を事前に決めることができません。こうした処理はwhileループが適しています。
もしこれをforで書こうとすると、無理やり回数を決める必要があり、不自然なコードになります。
forとwhileの使い分け
重要なのは、「どちらでも書けるか」ではなく「どちらが自然か」という視点です。
forループは「回数」や「要素」に基づいた処理に向いています。逆にwhileループは、「条件」や「外部の状態(時間・入力・結果)」に応じて繰り返す処理に適しています。
また、安全性の観点ではforループの方が優れています。終了条件が明確なため、予期しない無限ループになりにくいからです。
一方でwhileループは柔軟性が高く、breakやcontinueと組み合わせることで複雑な制御が可能になります。
補足:whileの制御
whileループでは break と continue を使うことで、より細かく動作をコントロールできます。
from datetime import datetime
target = (datetime.now().second + 2) % 60
while True:
now = datetime.now().second
if now < target:
continue
print("到達")
break

このように「条件を満たすまでスキップし、満たしたら終了する」という書き方は、forループでは表現しづらいパターンです。
補足:forで書けるのにwhileを使ってしまうケース
初心者がやりがちな間違いとして、「forで書けるのにwhileを使う」ケースがあります。
例えば単純なカウント処理をwhileで書くと、次のようになります。
i = 0
while i < 5:
print(i)
i += 1

これは動きますが、forで書いた方が圧倒的にシンプルです。
for i in range(5):
print(i)

こうした違いは、コードの可読性や保守性に直結します。
forループとwhileループはどちらも繰り返し処理の基本ですが、使いどころが明確に異なります。
forループは「安全でシンプル」、whileループは「柔軟で強力」と覚えると理解しやすいでしょう。
迷った場合はまずforループを検討し、それで表現しきれない場合にwhileループを使う、という順番にすると安定したコードが書けるようになります。
そしてwhileループを使う際は、「どこで終わるのか」を必ず意識することが重要です。それだけで無限ループのリスクを大きく減らすことができます。