エラノート エラノート

Python入門|for・whileループの使い方を解説

Python ループ for文 while文 入門
広告スペース (article-top)

プログラミングで「同じ処理を何度も繰り返す」場面は非常に多く出てきます。Pythonではfor文とwhile文を使ってループ(繰り返し)処理を行います。この記事では、2つのループの使い方と使い分けのポイントを解説します。

for文の基本

for文は「決まった回数」や「リストの要素を順番に」繰り返すときに使います。Pythonのfor文は他の言語と比べてシンプルで読みやすいのが特徴です。

リストを使ったループ

fruits = ["りんご", "みかん", "ぶどう"]

for fruit in fruits:
    print(fruit)

# 出力:
# りんご
# みかん
# ぶどう

for 変数 in リスト: という形で書きます。リストの要素が一つずつ変数に入り、ブロック内の処理が繰り返し実行されます。

range()を使ったループ

指定した回数だけ繰り返したいときはrange()を使います。

# 0から4まで(5回繰り返す)
for i in range(5):
    print(i)
# 出力: 0, 1, 2, 3, 4

# 1から10まで
for i in range(1, 11):
    print(i)
# 出力: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

# 0から10まで2刻み
for i in range(0, 11, 2):
    print(i)
# 出力: 0, 2, 4, 6, 8, 10

range()の引数は以下の通りです。

  • range(終了値): 0から終了値-1まで
  • range(開始値, 終了値): 開始値から終了値-1まで
  • range(開始値, 終了値, ステップ): 開始値から終了値-1までステップ刻み

enumerate()でインデックスも取得

要素と一緒に番号(インデックス)も欲しい場合はenumerate()を使います。

colors = ["赤", "青", "緑", "黄"]

for index, color in enumerate(colors):
    print(f"{index}: {color}")

# 出力:
# 0: 赤
# 1: 青
# 2: 緑
# 3: 黄

# 1から始めたい場合
for index, color in enumerate(colors, start=1):
    print(f"{index}: {color}")

# 出力:
# 1: 赤
# 2: 青
# 3: 緑
# 4: 黄

while文の基本

while文は「条件が満たされている間」繰り返すときに使います。繰り返す回数が事前にわからない場合に向いています。

count = 0

while count < 5:
    print(f"カウント: {count}")
    count += 1

# 出力:
# カウント: 0
# カウント: 1
# カウント: 2
# カウント: 3
# カウント: 4

while 条件式: という形で書き、条件式がTrueの間ブロック内の処理が繰り返されます。

while文の実用例

# ユーザー入力を繰り返し受け付ける
while True:
    user_input = input("コマンドを入力(qで終了): ")
    if user_input == "q":
        print("終了します")
        break
    print(f"入力: {user_input}")

# 合計が100を超えるまで加算
total = 0
num = 1

while total <= 100:
    total += num
    num += 1

print(f"合計: {total}, 最後に足した数: {num - 1}")
# 合計: 105, 最後に足した数: 14

ループの制御: break・continue・else

ループの流れを細かく制御するための命令があります。

break: ループを途中で抜ける

# リストから特定の要素を探す
numbers = [3, 7, 2, 9, 5, 1, 8]

for num in numbers:
    if num == 9:
        print("9を見つけました!")
        break
    print(f"{num}を確認中...")

# 出力:
# 3を確認中...
# 7を確認中...
# 2を確認中...
# 9を見つけました!

continue: 残りの処理をスキップして次のループへ

# 偶数だけを表示する
for i in range(10):
    if i % 2 != 0:
        continue  # 奇数はスキップ
    print(i)

# 出力: 0, 2, 4, 6, 8

for-else: ループが最後まで完了したときの処理

# 素数かどうかを判定
num = 17

for i in range(2, num):
    if num % i == 0:
        print(f"{num}は素数ではありません({i}で割り切れる)")
        break
else:
    # breakされずにループが完了した場合に実行される
    print(f"{num}は素数です")

# 出力: 17は素数です

for-elseのelseブロックは「breakされなかった場合」に実行されます。知らないと読みにくい構文ですが、検索系の処理で便利です。

ネスト(入れ子)ループ

ループの中にループを入れることもできます。

# 九九の表
for i in range(1, 10):
    for j in range(1, 10):
        print(f"{i * j:3d}", end="")
    print()  # 行の区切り

# 出力:
#   1  2  3  4  5  6  7  8  9
#   2  4  6  8 10 12 14 16 18
#   3  6  9 12 15 18 21 24 27
#   ...

ネストループは便利ですが、3重以上になるとコードが読みにくくなります。そのような場合は関数に分割することを検討しましょう。

リスト内包表記

Pythonにはfor文を1行で書ける「リスト内包表記」という便利な構文があります。

# 通常のfor文
squares = []
for i in range(1, 6):
    squares.append(i ** 2)
print(squares)  # [1, 4, 9, 16, 25]

# リスト内包表記(同じ結果)
squares = [i ** 2 for i in range(1, 6)]
print(squares)  # [1, 4, 9, 16, 25]

# 条件付きリスト内包表記
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print(even_squares)  # [4, 16, 36, 64, 100]

リスト内包表記は短く書けますが、複雑な処理には向きません。読みやすさを優先して通常のfor文と使い分けましょう。

よくある間違いと対策

間違い1: 無限ループ

# NG: countを更新し忘れて無限ループになる
# count = 0
# while count < 5:
#     print(count)
#     # count += 1 を忘れている!

# OK: カウンタを確実に更新する
count = 0
while count < 5:
    print(count)
    count += 1

while文では条件がFalseになるようにループ内で変数を更新する必要があります。もし無限ループになってしまったら、Ctrl + Cで強制停止できます。

間違い2: ループ中のリスト変更

# NG: ループ中にリストの要素を削除すると予期せぬ動作に
numbers = [1, 2, 3, 4, 5]
# for num in numbers:
#     if num % 2 == 0:
#         numbers.remove(num)  # 危険!

# OK: リスト内包表記で新しいリストを作る
numbers = [1, 2, 3, 4, 5]
odd_numbers = [num for num in numbers if num % 2 != 0]
print(odd_numbers)  # [1, 3, 5]

間違い3: range()の範囲ミス

# 1から5まで表示したい場合
# NG: 0から4まで表示されてしまう
for i in range(5):
    print(i)  # 0, 1, 2, 3, 4

# OK: range(1, 6)で1から5
for i in range(1, 6):
    print(i)  # 1, 2, 3, 4, 5

range(n)は0から始まりn-1で終わるという点を常に意識しましょう。

使い分けのまとめ

  • 回数が決まっている繰り返し → for
  • リストや辞書の要素を処理する → for
  • 条件が満たされる間繰り返す → while
  • ユーザー入力を繰り返し受け付ける → while

迷ったときはfor文を使ってみて、うまくいかなければwhile文に切り替えるという方法でも大丈夫です。実際のプログラミングではfor文の方が使う場面が多いです。

広告スペース (article-bottom)

あわせて読みたい