Python × 入門 | #09 forループで繰り返そう

条件分岐を学んだので、次は同じ処理をまとめて実行する for ループに進みます。forを使うと、同じ命令を決まった回数だけ自動で繰り返せます。

今回は range(N) を中心に、回数指定の繰り返しとカウンタ変数の使い方をPycoBlocksで確認します。

forループで繰り返し処理

まずはPycoBlocksを開こう

下のPycoBlocksで直接作業するか、別タブで開き、生成されるPythonコードを見ながら進めてください。今回は「繰り返し」カテゴリの変数iをN回繰り返すブロックを使います。

用語 意味
for ループ 決まった回数だけ処理を繰り返す構文。for 変数 in 範囲: の形で書く for i in range(3):
range(N) 0から N-1 までの整数列を生成する関数 range(3) → 0, 1, 2
range(start, stop) start 以上 stop 未満の整数列を生成する range(1, 4) → 1, 2, 3
ループ変数 forループで各繰り返しに使われる変数。毎回異なる値が入る i(慣習的によく使われる名前)

ステップ1:Helloを3回表示しよう

まずは固定回数の繰り返しです。range(3) は 0,1,2 の3回ループします。

ブロック例
for i in range(3):
    print("Hello")

ステップ2:iを表示しよう

ループ変数 i を表示すると、何回目かが確認できます。0始まりで増えるのがポイントです。

ブロック例
for i in range(3):
    print(i)

ステップ3:repeatで合計を作ろう

変数に値を足し込みながらループする「累積」の基本パターンです。ここでは _(アンダースコア)という名前を使っています。_ は「このループ変数の値は使わない」という意味のPythonの慣習的な書き方です。

ブロック例
s = 0
for _ in range(3):  # _ は「値を使わない」の意味
    s += 5          # 毎回 5 を足す
print(s)            # → 15

コーディングモードで書いてみよう

range(N) は「0からN-1まで」の整数列です。回数制御に使うときは、値そのものより「N回まわる」ことが重要です。

for i in range(5):
    print(i)  # 0,1,2,3,4

「5まで」ではなく「5回」の感覚で読むと、オフバイワン(1ずれるバグ)を防ぎやすくなります。たとえば「1〜10を処理したい」ときは range(10) ではなく range(1, 11) が正解です。range(10) は 0〜9 の10回です。

リスト:複数の値をまとめる

リストは複数の値を [] で囲ってまとめたものです。インデックス(番号)で各要素にアクセスでき、インデックスは 0 から始まります。for で一つずつ取り出す処理と相性がよいです。リストの詳しい使い方は後の章で学びます。

numbers = [3, 7, 1, 9, 4]
print(numbers[0])    # 3(先頭の要素)
print(numbers[-1])   # 4(末尾の要素)

# リストをforで一つずつ取り出す
for n in numbers:
    print(n)

# リストの要素数
print(len(numbers))  # 5

演習課題

課題9-1:1〜10の合計をforで求めよう

range(1, 11) を使って1から10までの整数を順番に足し合わせ、最後に合計を表示してください。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

ブロック例
total = 0
for i in range(1, 11):
    total = total + i
print("1〜10の合計:", total)

解説: range(1, 11) は1以上11未満、つまり1〜10の整数を生成します。total = total + i はループのたびに i を足し合わせていく「累積」の基本パターンです。数学の総和(Σ)と同じ考え方です。

課題9-2:九九の3の段をforで表示しよう

range(1, 10) を使って3の段(3×1から3×9まで)を9行で表示してください。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

ブロック例
for i in range(1, 10):
    print(f"3 × {i} = {3 * i}")

解説: range(1, 10) で1〜9のループ変数 i を順番に取り出しています。f文字列 {3 * i} でループごとに掛け算の結果を埋め込めます。0-1の演習課題5(九九の1の段を9行手書き)と同じ内容が、forを使えば2行で書けます。

課題9-3:1〜100の偶数の合計を求めよう

range(1, 101)if を組み合わせて、1〜100の中の偶数だけを足し合わせた合計を表示してください(答えは2550)。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

ブロック例
total = 0
for i in range(1, 101):
    if i % 2 == 0:
        total = total + i
print("1〜100の偶数の合計:", total)

解説: forループの中にifを入れることで「条件を満たす数だけ処理する」ができます。i % 2 == 0 は「iが偶数かどうか」の判定です。range(2, 101, 2)(2から始まり2ずつ増える)を使えばifなしで偶数だけ取り出せます(次章で学習)。

課題9-4:FizzBuzz(1〜30)をforで実装しよう

range(1, 31) を使い、1〜30の各数を処理してください。3の倍数ならFizz、5の倍数ならBuzz、15の倍数ならFizzBuzz、それ以外はその数を表示します。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

ブロック例
for i in range(1, 31):
    if i % 15 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

解説: 課題7-5(FizzBuzz 1問分)をforループで30回繰り返した形です。条件の順番(15の倍数を最初に)が重要です。FizzBuzzはプログラミングの基礎力を確認する定番問題として多くの企業採用試験でも出題されます。

課題9-5:リストから最大値をforのみで求めよう

numbers = [3, 7, 1, 9, 4, 6, 2] のリストから、max() を使わずに for ループだけで最大値を求めて表示してください。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

ブロック例
numbers = [3, 7, 1, 9, 4, 6, 2]
max_val = numbers[0]  # 最初の要素で初期化
for n in numbers:
    if n > max_val:
        max_val = n
print("最大値:", max_val)

解説: リストの先頭要素で初期化し、残りの要素と順番に比較して最大値を更新していきます。このパターンを「逐次最大値探索(線形探索)」といい、アルゴリズムの基礎です。後の章でより体系的に学びます。

課題9-6:「*」で三角形を表示しよう

range(1, 6) を使い、次のような三角形を表示してください。
*
**
***
****
*****

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

三角形を*で描くブロック例
for i in range(1, 6):
    print("*" * i)

解説: "*" * i*i 個繰り返した文字列を作ります。ループ変数 i が1〜5と増えることで、自動的に三角形が描けます。この「文字列×整数」のパターンはPython独特の便利な書き方です。

まとめ

  • for i in range(N) で同じ処理をN回繰り返せる
  • range(N) は 0〜N-1、range(start, stop) は start〜stop-1 の整数を生成する
  • ループ内に if を組み合わせると「条件を満たすものだけ処理」できる

次は、開始値・終了値・増分を指定するforループの応用を扱います。→ Python × 入門 | #10 forループを使いこなそう

PAGE TOP