無限ループと終了条件

Pythonのwhile文は、指定した条件が正しい(真:True)である限り、何度でも同じ処理を繰り返す便利な構文です。しかし、条件がいつまでもTrueのままだと、プログラムは終わりなく処理を続けてしまいます。これが無限ループです。無限ループが発生すると、パソコンに過度な負荷がかかったり、プログラムがフリーズしたりするため、適切な「終了条件(出口)」の設計が極めて重要になります。この記事では、無限ループのメカニズムと、安全にループを制御・終了させる方法を解説します。
制御不能な無限ループの例
無限ループは、while文の条件式が常に満たされているか、ループの内部で条件を変化させる処理を忘れたときに発生します。以下は、最も典型的な「終わりがない」コードの例です。
# 【注意】実行すると止まらなくなる無限ループの例
while True:
print("無限ループ中")
このコードでは、条件式に True そのものが指定されているため、文字通り永久に "無限ループ中" という文字が出力され続けます。
【もし実行して止まらなくなったら?】
もし学習中に無限ループを実行してしまった場合は、慌てずに実行中のターミナル(コンソール)画面で Ctrl + C (Macでも Ctrl + C)を押してください。プログラムを強制終了(キーボード割り込みエラー)させることができます。
break文を使った「途中で抜け出す」終了方法
無限ループを安全にコントロールするための代表的な方法が、break 文の使用です。あえて while True: で無限ループを作っておき、特定の条件を満たしたときだけ break を発動させて強制終了させます。
# break文を使って安全に終了させる例
counter = 0
while True:
print("ループ処理を実行中...")
counter += 1 # カウンタを1ずつ増やす
# 5回繰り返したらループを抜ける
if counter == 5:
print("5回に達したのでループを終了します。")
break
この例では、最初は while True で回り続けますが、内部で counter が 5 になった瞬間に if 文の条件が成立し、break が実行されてループの檻から一瞬で脱出します。
一見すると遠回りに見えますが、「ユーザーが『終了』と入力するまで処理を繰り返す」といった、いつ終わるか事前に分からない実務のプログラム(対話型ツールやゲームのメインループなど)では、この while True と break の組み合わせが王道スタイルとして非常によく使われます。
条件式でスマートに終了条件を設定する方法
もう一つの方法は、while の後ろの条件式そのものに「いつまで続けるか」の基準を書いておく方法です。
# 条件式で終わりをコントロールするwhileループ
num = 0
while num < 10:
print(f"現在の数値: {num}")
num += 1 # ★超重要:この行を忘れると無限ループになります
このコードでは、ループが1回まわるごとに num += 1 で数値がカウントアップされていきます。そして num が 10 に達した瞬間に、条件式である num < 10 が満たされなくなり(Falseになり)、ループが綺麗に自動終了します。
無限ループの発生を未然に防ぐチェックリスト
while文を書くときは、意図しない無限ループによってプログラムが暴走しないよう、以下の3点を確認する癖をつけましょう。
- カウンタの更新を忘れていないか: ループ内で
num += 1のような条件を動かす記述を忘れると、変数が初期値のまま固定され、永遠に条件を満たし続けてしまいます。 - 条件式がいつか必ず False になるか: 「いつかは終わる条件」になっているかを脳内でシミュレーションしましょう。
- break文へのルートが確実にあるか:
while Trueを使う場合は、例外なくbreakを通る判定ロジックが組み込まれているか確認してください。
まとめ
while文によるループ処理は、回数が決まっていない繰り返しを扱うための強力な仕組みです。しかし、表裏一体のリスクとして「無限ループ」の危険が常に潜んでいます。条件式を使ってスマートに引き際を設定するか、あるいは while True に break 文を仕込んで中からこじ開けるか、状況に応じて適切な出口を用意しましょう。万が一暴走したときは「Ctrl + C」で止められるという安心感を持ったうえで、様々な繰り返し処理に挑戦してみてください。