Pythonのwhileループを使いこなそう!基本からbreakやcontinueの応用まで解説

2025年4月24日木曜日

Python

Pythonのwhileループ、プログラミング学習中の皆さん、使いこなせていますか?

この記事では、そんなPythonのwhileループの基本から、ちょっと応用的な使い方、そしてみんなが気になる無限ループを避けるコツまで、まるっと解説していきます。もうwhileループなんて怖くない!って思えるようになるはず。

この記事で学べること

  • whileループの基本的な仕組みと書き方がわかる
  • どんな時にwhileループを使うと便利なのかがわかる
  • 無限ループにサヨナラ!その原因と対策がわかる
  • break文やcontinue文でループを自在に操れるようになる
  • 実践的なコード例で、whileループの使いどころがイメージできる


Pythonのwhile文とは?繰り返し処理の基本を学ぼう

まず、whileループって何ぞや?ってところから始めましょう。

簡単に言うと、whileループは「ある条件が満たされている間(Trueの間)、特定の処理をずーっと繰り返す」ための命令です。

例えば、自動ドアを想像してみてください。「人がドアの前にいる」という条件が満たされている間は「ドアを開け続ける」という処理を繰り返しますよね。人がいなくなったら(条件が満たされなくなったら)、ドアを閉める。これがwhileループの基本的な考え方です。

Pythonにはもう一つ、forループという繰り返し処理もありますが、こちらは「リストの全要素に対して処理する」みたいに、繰り返す回数や範囲があらかじめ決まっている場合に得意です。

一方、whileループは「いつ終わるか分からないけど、特定の条件になるまで繰り返したい」という場面で大活躍しますよ!

while文の基本的な書き方と構文ルール

さて、いよいよwhileループの書き方を見ていきましょう。構文は意外とシンプルですよ!

while 条件式:
    # 条件式がTrueの間、繰り返される処理
    処理1
    処理2
    # ループを終わらせるために、条件式に関わる変数を変化させる処理も忘れずに!

ポイントは以下の通りです。

  • while というキーワードの後に、繰り返すかどうかを判断するための条件式を書きます。
  • 条件式の最後にはコロン(:)を忘れずにつけましょう。
  • 次の行から、繰り返したい処理をインデント(字下げ)して書きます。このインデントされた部分が、whileループの処理ブロックです。Pythonではインデントが超大事!
  • 条件式がTrueの間、インデントされた処理が上から順に実行され、ブロックの最後まで行くと、また条件式の判定に戻ります。
  • 条件式がFalseになった時点で、ループは終了し、ループブロックの次の処理に進みます。

イメージするとこんな感じです。

while (条件がTrueの間):
▶ ---- ここからインデント ----
  | 繰り返したい処理1      |
  | 繰り返したい処理2      |
  ---- ここまでインデント ---- <--- 処理が終わったら、また条件のチェックに戻る
   |
   V (条件がFalseになったら)
次の処理へ

インデントを揃えることと、いつか条件式がFalseになるようにすること、この2点をしっかり押さえておきましょう!

サンプルプログラムと実行結果

百聞は一見にしかず!簡単なサンプルコードを見てみましょう。
1から5までの数字を表示するプログラムです。

# カウンター変数を初期化
count = 1

# countが5以下の間、ループを続ける
while count <= 5:
    print(count)  # countの値を表示
    count = count + 1  # countを1増やす(これを忘れると無限ループ!)

print("ループ終了!")

これを実行すると、コンソールにはこう表示されます。

1
2
3
4
5
ループ終了!

まずcountに1が設定されます。while count <= 5: の条件式はTrueなので、ループ内の処理が実行されます。print(count)で1が表示され、count = count + 1countが2になります。

そしてまた条件式に戻り、count (今は2) は5以下なのでTrue。2が表示され、countが3に…という流れを繰り返し、countが6になった時点で count <= 5 がFalseとなり、ループが終了して「ループ終了!」が表示されるわけです。

ループ内で条件に関わる変数を変更する処理(ここではcount = count + 1)が非常に大事だとわかりますね!

while文で無限ループを防ぐ確実な方法

さあ、やってきました!みんな大好き(?)無限ループのお話です。

無限ループとは、その名の通り、ループが永遠に終わらなくなってしまう状態のこと。プログラムが固まって応答しなくなったり、CPUを使い切ってしまったり、なかなか厄介なやつです。

なぜ無限ループが起きるのか?主な原因は2つ。

  1. 条件式が常にTrueになってしまう
    例えば while True: と書くと、条件は常に真なので、意図的にループを抜ける処理(後述するbreak)がない限り止まりません。
  2. ループ内で条件式の判定に使われる変数を変更し忘れる
    さっきのカウンターの例で count = count + 1 を書き忘れると、countはずっと1のまま。count <= 5 は永遠にTrueなので、無限に1が表示され続けます。これが一番やりがちなミス!

無限ループを防ぐには、

  • ループを抜ける条件をちゃんと設定する
  • ループ内で、その条件に関わる変数がちゃんと変化するように処理を書く

この2つを常に意識しましょう!

もし、うっかり無限ループを実行しちゃったら…慌てずに!

大抵の実行環境では、キーボードのCtrlキーを押しながらCキーを押す(Ctrl+C)ことで、プログラムを強制終了できます。覚えておくと安心ですよ。

whileループを途中で抜けるbreak文の使い方

whileループは条件式がFalseになるまで繰り返しますが、「ループの途中だけど、もうこの処理はやめたい!」という時もありますよね。

そんな時に使うのがbreakです。

break文が実行されると、ループの条件式がどうであれ、その時点で即座にループ全体が終了します。ループブロックから強制的に脱出するイメージです。

よく使うのは、if文と組み合わせて、「特定の条件になったらループを抜ける」というパターンです。

# 何か入力されるのを待ち続ける
while True:  # まず無限ループにしておく
    user_input = input("何か入力してください ('quit'で終了): ")
    if user_input == 'quit':
        print("終了します。")
        break  # 'quit'と入力されたらループを抜ける!
    print(f"入力されたのは「{user_input}」ですね。")

print("ループの外に出ました。")

この例では、ユーザーが「quit」と入力するまで、延々と入力を促し続けます。「quit」が入力された瞬間にif文の中に入り、breakが実行されてwhileループが終了する、という流れです。

breakはループ自体を終わらせる、と覚えておきましょう。

whileループで処理をスキップするcontinue文の使い方

breakがループ自体を終わらせるのに対して、「今回はループの残りの処理を飛ばして、次の回のループ(条件判定)に進みたい」という時に使うのがcontinueです。

continue文が実行されると、その回のループブロック内でcontinueよりも下にある処理はすべてスキップされ、すぐに次のループの条件判定に戻ります。

例えば、1から10までの数字のうち、偶数だけを表示したい場合、こんな風に書けます。

num = 0
while num < 10:
    num = num + 1
    # numが奇数だったら、printせずに次のループへ
    if num % 2 != 0:  # % は余りを計算する演算子
        continue  # ここで下のprintは実行されず、whileの条件判定に戻る
    print(num) # 偶数の場合だけ表示される

print("偶数だけ表示完了!")

実行結果:

2
4
6
8
10
偶数だけ表示完了!

numが1, 3, 5, 7, 9 のときはif num % 2 != 0:がTrueになり、continueが実行されます。すると、その下にあるprint(num)は実行されずに、すぐにwhile num < 10:の判定に戻るのです。

continueは現在の回の処理だけをスキップする、と理解しておきましょう。

while文とelse文を組み合わせる応用テクニック

ちょっと面白い機能として、Pythonのwhileループにはelseブロックを付けることができます。
これは、if文のelseとは少し意味合いが違います。

whileループのelseブロックは、ループがbreak文で中断されずに、条件式がFalseになって正常に終了した場合にのみ実行されます。

どういう時に使うかというと、「ループが無事に最後まで終わったことを確認したい」場合などに便利です。

count = 0
while count < 3:
    print(f"ループ実行中: count = {count}")
    count += 1
    # ここでbreakする条件を入れてみる(例: countが2になったらbreak)
    # if count == 2:
    #     print("途中でbreakします!")
    #     break
else:
    # このブロックは、ループがbreakされずに正常終了した場合だけ実行される
    print("ループが正常に終了しました!")

print("プログラム終了")

上記のコード(breakの部分がコメントアウトされている状態)を実行すると、以下のようになります。

ループ実行中: count = 0
ループ実行中: count = 1
ループ実行中: count = 2
ループが正常に終了しました!
プログラム終了

ループが3回実行され、countが3になった時点でcount < 3がFalseになり、正常にループが終了したので、elseブロック内のメッセージが表示されました。

もし、if count == 2:の行とbreakの行のコメントを外して実行すると、countが2になった時点でbreakが実行され、ループが途中で終わるため、elseブロックは実行されません。

ループ実行中: count = 0
ループ実行中: count = 1
途中でbreakします!
プログラム終了

このように、ループが最後まで完走したか、途中で脱出したかを判別したいときに、while-else構文は役立ちます。

while文の実践的な使い方

理屈はわかったけど、実際にどう使うの?という声が聞こえてきそうですね。
ここでは、もう少し実践的なwhileループのサンプルコードをいくつか見てみましょう!

例1 簡単な数当てゲーム

import random

# 1から10までのランダムな数を生成
answer = random.randint(1, 10)
guess = 0 # ユーザーの予想値を初期化

print("数当てゲーム! 1から10の数を当ててね。")

while guess != answer:
    try:
        guess = int(input("予想する数を入力: "))
        if guess < answer:
            print("もっと大きいよ!")
        elif guess > answer:
            print("もっと小さいよ!")
    except ValueError:
        print("ちゃんと数字を入力してね!")

# ループを抜けたら正解!
print(f"正解!答えは {answer} でした!")

このコードでは、ユーザーが正解の数字(answer)を入力するまで、while guess != answer:のループが続きます。

入力された値(guess)がanswerと等しくなった時点で条件がFalseになり、ループが終了して正解メッセージが表示される仕組みです。ユーザーの入力によって繰り返し回数が変わる典型的な例ですね。

例2 'quit'と入力されるまで対話

print("こんにちは!何か話しかけてください。 ('quit'で終了)")

while True: # まずは無限ループ
    message = input("> ")
    if message == 'quit':
        print("さようなら!")
        break # quitでループを抜ける
    elif 'こんにちは' in message:
        print("こんにちは!元気?")
    elif '疲れた' in message:
        print("お疲れ様!ゆっくり休んでね。")
    else:
        print("ふむふむ、なるほど。")

これはbreakの例でも見たパターンですが、ユーザーが「quit」と入力するまで対話を続けます。入力内容に応じて簡単な返事を返すようにしています。終了条件が明確な場合にwhile True:breakを組み合わせるのはよくある手法です。

while文で初心者が陥りやすい注意点

whileループは便利ですが、初心者がつまづきやすいポイントもいくつかあります。無限ループ以外にも、こんな点に注意しましょう!

  • 条件式のミス
    等しいかどうかを比較したいのに、代入の=を1つだけ書いてしまう(while count = 5: など)。比較は==を使うのがお約束です!大なり小なりの向き(<>)を間違えることもあります。
  • カウンター変数の更新忘れ
    無限ループの項目でも触れましたが、これは本当に多いミスです!ループ内で条件に関わる変数をちゃんと変更しているか、必ず確認しましょう。
  • インデントの誤り
    Pythonではインデントがブロックを示すので、インデントがずれていると、ループに含めたい処理がループの外にあるとみなされたり、逆にループに含めたくない処理がループ内に入ってしまったりします。エラーの原因にもなるので、インデントは正確に!
  • ループ変数のスコープ
    ループの中で定義した変数は、基本的にはループの外では使えません(場合によりますが)。ループの外で使いたい値は、ループの前に変数を定義しておきましょう。

もし、whileループが思った通りに動かなかったら?

まずはprint()文を使ったデバッグを試してみましょう!ループの前後やループの中で、変数の値がどうなっているかprint()で表示させてみるのです。

count = 1
while count <= 5:
    print(f"ループ開始時のcount: {count}") # ★デバッグ用に追加
    # 何か処理...
    print(count)
    count = count + 1
    print(f"ループ終了時のcount: {count}") # ★デバッグ用に追加

print("ループ終了!")

こうすることで、変数が意図した通りに変化しているか、条件判定が正しく行われているかなどを追跡できます。地道ですが、これが一番確実なデバッグ方法の一つですよ!

Pythonのwhile文の学習まとめ

これでPythonのwhileループの基本から応用、注意点まで一通り理解できたはずです!

今回学んだポイントを振り返ってみましょう。

  • whileループは条件がTrueの間、処理を繰り返す
  • 繰り返す回数が決まっていない時に特に便利
  • 構文は while 条件式: とインデントが肝心
  • 無限ループを避けるには、条件式の見直しとループ内での変数更新が必須!
  • breakでループを強制終了、continueで現在の回をスキップ
  • elseブロックはループが正常終了した時に実行される

forループとwhileループ、どちらを使うか迷うこともあるかもしれませんが、「回数が決まっているならfor、条件次第ならwhile」と大まかに覚えておくと良いでしょう。

【関連記事】 「Pythonとは?」に答える最初の一歩

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ