Python | While / for の図解比較版

Python Python
スポンサーリンク

初心者がつまずきやすいのは「いつ 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
Python
numbers = [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
Python

while で同じ課題(条件を組み込みながら進める)

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 で途中値を確認。
  • 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 を選ぶと、迷いが減ります。

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました