初心者がつまずきやすいのは「いつ while を使うか、いつ for を使うか」。ここでは、両者の動き方を図解的に捉えながら、例題で違いを体感できるように説明します。
動き方のイメージ図
for ループのイメージ(「並べられたもの」を順に取り出す)
[要素1] -> [要素2] -> [要素3] -> ... -> [要素N]
↓ ↓ ↓ ↓
処理 処理 処理 処理
- 対象: リスト、文字列、辞書、range など「繰り返す対象」が明確なとき。
- 取り出し: 1要素ずつ自動で取り出される(インデックス管理不要)。
while ループのイメージ(「条件」を満たす間ずっと回す)
条件を評価 → True なら本体を実行 → また条件へ戻る →(Falseで終了)
- 対象: 「いつ終わるか」を条件で決めたいとき(ユーザー入力、外部状態、カウンタなど)。
- 取り出し: 何を進めるかは自分で管理(インデックスやカウンタの更新が必要)。
使い分けの考え方
- for を選ぶ:
- 対象が列挙可能: すでに「並び」がある(例:
numbers = [10, 20, 30])。 - 終わりが決まっている: 何回回すか明確(例:
range(10))。
- 対象が列挙可能: すでに「並び」がある(例:
- while を選ぶ:
- 終了条件が中心: いつ止めるかは状態次第(例: 入力が
'q'になるまで)。 - インデックスや状態更新: 自分で回数や位置を進める必要がある。
- 終了条件が中心: いつ止めるかは状態次第(例: 入力が
直感の指針: 「並びをなぞるなら for」「条件を見張るなら while」。
例題で比較
例題1: リストの合計を求める(for が自然)
numbers = [2, 4, 6, 8]
total = 0
for n in numbers: # 並びを順に取り出す
total += n
print(total) # 20
Pythonnumbers = [2, 4, 6, 8]
total = 0
i = 0
while i < len(numbers): # 条件で「まだ要素が残っているか」を見る
total += numbers[i]
i += 1 # インデックスを自分で進める
print(total) # 20
Python- ポイント: 同じ結果だが、for は「列挙」に強く、while は「条件・状態管理」が必要。
例題2: 最初の偶数を見つけたら止める(break と return の両方)
for + break(スクリプト内でループだけ止めたい)
numbers = [3, 7, 11, 18, 21]
for n in numbers:
if n % 2 == 0:
print("最初の偶数:", n)
break
else:
print("偶数は見つかりませんでした")
Python関数化 + return(見つかったら処理全体を終えたい)
def find_first_even(numbers):
for n in numbers:
if n % 2 == 0:
return n
return None
result = find_first_even([3, 7, 11, 18, 21])
print(result) # 18
Pythonwhile で同じ課題(条件を組み込みながら進める)
numbers = [3, 7, 11, 18, 21]
i = 0
found = None
while i < len(numbers) and found is None:
if numbers[i] % 2 == 0:
found = numbers[i] # 条件が満たされたら自分で停止フラグにする
i += 1
print(found if found is not None else "偶数は見つかりませんでした")
Python- 比較: for は「並び」に自然で短い。while は「止めどき」を条件に直結できるが、状態管理が増える。
例題3: ユーザー入力を受け取り続ける(while が自然)
# 'q' が入力されるまで続ける
while True:
text = input("何か入力してください(終了=q): ")
if text == "q":
print("終了します")
break
print("入力:", text)
Python- 理由: 「終わる条件」が外部(ユーザー)にあり、回数が決まっていないため while が合っている。
- 対比: for で入力回数を固定できるなら for も使えるが、柔軟さは while。
よくあるつまずきと回避策
- インデックス更新のし忘れ(while):
- 対策: ループ本体の最後に、必ずインデックスやカウンタを進める。
- 無限ループ(while):
- 対策: 「いつ False になるか」を紙に書いてから実装。必要なら
printで途中値を確認。
- 対策: 「いつ False になるか」を紙に書いてから実装。必要なら
- for でのインデックスが必要なとき:
- 対策:
for i, x in enumerate(items):を使うと、要素と位置の両方が取れて安全。
- 対策:
- 集合や辞書の順序誤解:
- 対策: 順序が必要ならリストやタプルにする。辞書は
for key, value in dict.items()が定番。
- 対策: 順序が必要ならリストやタプルにする。辞書は
練習問題
- 練習1(for): リストの文字列の長さをそれぞれ出力する。
- 練習2(while):
count = 0から始め、countが 5 になったら止める。 - 練習3(両方): リストから最初の3の倍数を見つけて表示(for+break と while+条件フラグで)。
- 練習4(enumerate): リストから最初の負の数の「値」と「インデックス」を表示(for+enumerate)。
実務や学習では、「並びがあるなら for」を基本にし、外部状態や継続条件で止めたいときだけ while を選ぶと、迷いが減ります。


