Pythonでプログラムを書く際、特定の条件が満たされている間、同じ処理を何度も繰り返したい場面が頻繁に登場します。
このような繰り返し処理を制御するために欠かせないのが「while文」です。
while文をマスターすることで、リストの要素を順番に処理するだけでなく、ユーザーの入力を待ち続けたり、特定の計算結果が目標値に達するまでシミュレーションを行ったりと、プログラムの柔軟性が飛躍的に向上します。
本記事では、Pythonのwhile文における基本的な書き方から、breakやcontinueを用いた応用的な制御、さらに実務で役立つ効率的なループ処理のコツまで詳しく解説します。
for文との使い分けについても触れていくため、状況に応じた最適な繰り返し処理を選択できるようになるでしょう。
Pythonのwhile文:基本的な書き方と動作の仕組み
while文は、指定した条件式が「True(真)」である限り、ブロック内の処理を繰り返し実行する構文です。
条件が「False(偽)」になった時点でループから抜け出し、次の処理へと進みます。
基本構文の構造
while文の最もシンプルな形は以下の通りです。
Pythonではインデント(字下げ)によって、どの範囲がループに含まれるかを判断するため、記述の際には注意が必要です。
# カウンタ変数の初期化
count = 0
# countが5未満の間、処理を繰り返す
while count < 5:
print(f"現在のカウントは {count} です")
# カウンタを更新(これを忘れると無限ループになります)
count += 1
print("ループが終了しました")
現在のカウントは 0 です
現在のカウントは 1 です
現在のカウントは 2 です
現在のカウントは 3 です
現在のカウントは 4 です
ループが終了しました
この例では、まず変数 count を 0 で初期化しています。
while文の条件式 count < 5 が評価され、True であれば print 関数と count += 1 が実行されます。
count が 5 になった時点で条件式が False となり、ループが終了します。
無限ループに注意する理由
while文を利用する上で最も注意しなければならないのが無限ループです。
無限ループとは、条件式がいつまでも False にならないために、プログラムが永続的に実行され続けてしまう状態を指します。
例えば、先ほどのコードで count += 1 を書き忘れてしまうと、count は常に 0 のままになり、条件 count < 5 は永遠に True となってしまいます。
もし意図せず無限ループに陥った場合は、実行環境で Ctrl + C (Windows/Mac共通)などの割り込みコマンドを入力して強制終了させる必要があります。
ループの動きを制御する:breakとcontinue
while文の中に特定の条件を組み合わせることで、ループの動きをさらに細かく制御することが可能です。
代表的なものに break 文と continue 文があります。
ループを途中で終了する break
break 文は、ある条件が満たされた際に、ループ全体を即座に終了させるために使用します。
例えば、膨大なデータを処理している最中に目的の値を見つけた場合、それ以上の処理を続ける必要がないため break を使って効率化を図ります。
i = 1
while i <= 10:
if i == 6:
print("値が6になったので、処理を中断します")
break
print(f"数値: {i}")
i += 1
数値: 1
数値: 2
数値: 3
数値: 4
数値: 5
値が6になったので、処理を中断します
特定の処理をスキップする continue
一方で continue 文は、ループ自体を終了させるのではなく、現在の回の残りの処理をスキップして次の繰り返し(条件判定)に戻る際に使用します。
i = 0
while i < 5:
i += 1
if i == 3:
print("3のときは出力をスキップします")
continue
print(f"現在の数値: {i}")
現在の数値: 1
現在の数値: 2
3のときは出力をスキップします
現在の数値: 4
現在の数値: 5
このコードでは i が 3 のときだけ print 処理が行われず、すぐに while i < 5 の条件判定へと戻っています。
while文とelse節の組み合わせ
Python特有の書き方として、while文に else 節を組み合わせることができます。
この else ブロックは、「ループの条件式が False になって正常に終了したとき」に一度だけ実行されます。
count = 0
while count < 3:
print(f"カウント中: {count}")
count += 1
else:
print("条件を満たさなくなったため、正常に終了しました")
カウント中: 0
カウント中: 1
カウント中: 2
条件を満たさなくなったため、正常に終了しました
重要な点として、ループ内で break 文が実行されて強制終了した場合には、else 節の処理は実行されないというルールがあります。
これを利用することで、「最後までループが回りきったか(目的のものが無かったか)」を判定するフラグ管理のような記述が簡潔になります。
実務におけるwhile文の活用シーン
while文はどのような場面で活用されるのでしょうか。
代表的な実践例を紹介します。
ユーザーからの入力を待機する
特定のキーワードが入力されるまでプログラムを稼働させ続けたい場合、while文が最適です。
# 'exit'と入力されるまで繰り返す
user_input = ""
while user_input.lower() != "exit":
user_input = input("何か入力してください(終了するには 'exit'): ")
print(f"入力された内容: {user_input}")
このように、繰り返しの回数が事前には決まっていない状況において、while文はその真価を発揮します。
リトライ処理の実装
ネットワークエラーなどでAPIリクエストが失敗した際に、最大3回まで再試行するといったリトライ処理にもよく使われます。
attempts = 0
max_attempts = 3
success = False
while attempts < max_attempts:
attempts += 1
print(f"{attempts}回目の試行中...")
# ここに処理を記述(今回は仮に成功判定をシミュレート)
if attempts == 3:
success = True
break
if success:
print("処理に成功しました")
else:
print("規定回数を超えたため、処理を断念しました")
for文とwhile文の使い分け
Pythonにはもう一つの代表的なループ構文である for文 があります。
初心者が迷いやすいこれら二つの使い分けについて、以下の表にまとめました。
| 特徴 | for文 | while文 |
|---|---|---|
| 主な用途 | リストや範囲などの順次処理 | 条件が満たされるまでの継続処理 |
| 繰り返しの回数 | あらかじめ決まっていることが多い | 実行されるまで決まらないことが多い |
| 書きやすさ | 簡潔で読みやすい | 柔軟だが、無限ループのリスクがある |
| 終了条件 | 要素を使い切ったとき | 条件式が False になったとき |
基本的には、「回数が決まっているなら for、条件だけが決まっているなら while」という基準で選択するのがベストプラクティスです。
効率的なループ処理のための最新テクニック
Pythonのバージョンが進化するにつれ、while文と組み合わせて使うと便利な機能も増えています。
その一つが、Python 3.8から導入された「セイウチ演算子(代入演算子) := 」です。
セイウチ演算子による簡潔な記述
以前までは、ループの前に一度変数を初期化し、ループ内でも値を更新するコードが必要でしたが、セイウチ演算子を使うとこれらを一行にまとめることができます。
# ファイルの内容を一行ずつ読み込む例
# セイウチ演算子なし(従来)
# line = f.readline()
# while line:
# print(line)
# line = f.readline()
# セイウチ演算子あり(より洗練された書き方)
# while (line := f.readline()):
# print(line)
この書き方は、データ分析や大規模なテキスト処理において、コードの可読性を高めるために推奨されています。
大規模データ処理におけるメモリ効率
2026年現在のソフトウェア開発では、メモリ使用量の最適化がさらに重視されています。
while文を使って大量のデータを1件ずつ処理する場合、全てのデータを一度にメモリ上に展開(ロード)するのではなく、ジェネレータなどと組み合わせて、「必要な分だけをループ内で逐次処理する」ように設計することが、パフォーマンス向上に繋がります。
まとめ
Pythonのwhile文は、単純な繰り返し処理から複雑な条件制御まで、幅広く対応できる非常に強力な構文です。
本記事では以下のポイントを中心に解説しました。
- while文の基本的な書き方とインデントの重要性
- 無限ループを回避するためのカウンタ変数の更新
breakやcontinueによる柔軟なループ制御else節を利用した正常終了時の処理for文との使い分けの基準- セイウチ演算子を用いたモダンなコーディング手法
while文は自由度が高い反面、無限ループのようなエラーを引き起こす可能性も含んでいます。
そのため、記述する際は常に「どのようにしてこのループは終わるのか」という終了条件を明確に意識することが大切です。
基本をしっかりと押さえた上で、適切な制御文や新機能を取り入れて、よりクリーンで効率的なPythonプログラムを構築していきましょう。
