Python入門:forとwhileの違いと使い分けをわかりやすく解説

python logo notext.svg

Pythonで繰り返し処理を書くとき、必ず登場するのが「forループ」と「whileループ」です。どちらも同じように見えますが、実際には役割が大きく異なります。この違いを理解せずに使っていると、コードが読みにくくなったり、思わぬバグを生む原因になります。

この記事では、それぞれの特徴を比較しながら「どの場面でどちらを使うべきか」を具体例とともに解説していきます。

Pythonの導入についてはこちら。

Python入門:最初のプログラムを作って実行する方法 – Lean Data Office

Python環境構築のやり方|初心者向け完全ガイド – Lean Data Office

forループの基本

forループは「繰り返す回数が決まっている処理」に強い構文です。リストやrangeなど、あらかじめ回数や要素が確定している場合に使います。t

for i in range(5):
    print(f"{i}回目の処理")
image

このコードは5回だけ繰り返されます。開始から終了までが明確なので、意図しない無限ループになる心配はほとんどありません。

また配列やリストとの相性も良く、データ処理では非常に多用されます。

items = ["apple", "banana", "orange"]
for item in items:
    print(item)
image

このように、forループは「安全で読みやすい」という点が大きな特徴です。

whileループの基本

一方のwhileループは、「条件が満たされている間はずっと繰り返す」構文です。

count = 0
while count < 5:
    print(count)
    count += 1
image

このコードでは、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("時間になりました")
image

ここでは終了回数を事前に決めることができません。こうした処理はwhileループが適しています。

もしこれをforで書こうとすると、無理やり回数を決める必要があり、不自然なコードになります。

forとwhileの使い分け

重要なのは、「どちらでも書けるか」ではなく「どちらが自然か」という視点です。

forループは「回数」や「要素」に基づいた処理に向いています。逆にwhileループは、「条件」や「外部の状態(時間・入力・結果)」に応じて繰り返す処理に適しています。

また、安全性の観点ではforループの方が優れています。終了条件が明確なため、予期しない無限ループになりにくいからです。

一方でwhileループは柔軟性が高く、breakやcontinueと組み合わせることで複雑な制御が可能になります。

補足:whileの制御

whileループでは breakcontinue を使うことで、より細かく動作をコントロールできます。

from datetime import datetime
target = (datetime.now().second + 2) % 60
while True:
    now = datetime.now().second
    if now < target:
        continue
    print("到達")
    break
image

このように「条件を満たすまでスキップし、満たしたら終了する」という書き方は、forループでは表現しづらいパターンです。

補足:forで書けるのにwhileを使ってしまうケース

初心者がやりがちな間違いとして、「forで書けるのにwhileを使う」ケースがあります。

例えば単純なカウント処理をwhileで書くと、次のようになります。

i = 0
while i < 5:
    print(i)
    i += 1
image

これは動きますが、forで書いた方が圧倒的にシンプルです。

for i in range(5):
    print(i)
image

こうした違いは、コードの可読性や保守性に直結します。

forループとwhileループはどちらも繰り返し処理の基本ですが、使いどころが明確に異なります。

forループは「安全でシンプル」、whileループは「柔軟で強力」と覚えると理解しやすいでしょう。

迷った場合はまずforループを検討し、それで表現しきれない場合にwhileループを使う、という順番にすると安定したコードが書けるようになります。

そしてwhileループを使う際は、「どこで終わるのか」を必ず意識することが重要です。それだけで無限ループのリスクを大きく減らすことができます。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。