Python × 入門 | #10 forループを使いこなそう

前の単元では for i in range(5): のように「N回繰り返す」使い方を学びました。でも range() にはもっと便利な使い方があります。開始値を変えるステップ(増え幅)を変える逆順に数える——これらを使いこなすと、繰り返しで表現できる処理が一気に広がります。

この単元では range(start, stop)range(start, stop, step) の2つの形式をブロックとコードで確認します。

forループを使いこなそう

まずはPycoBlocksを開こう

下のPycoBlocksで直接作業するか、別タブで開き、生成されるPythonコードを見ながら進めてください。

用語 意味
range(start, stop) start 以上 stop 未満の整数列を生成(stop は含まない) range(2, 7) → 2,3,4,5,6
range(start, stop, step) step 刻みの整数列を生成 range(1,10,2) → 1,3,5,7,9
step(増え幅) range の3番目の引数。省略すると 1。マイナスにすると逆順 range(5,0,-1) → 5,4,3,2,1

ステップ1:開始値を指定しよう(range の2引数形式)

range(N) は 0 から N-1 まで数えます。でも「2から始めたい」「10から始めたい」という場合はrange(start, stop) を使います。start から始まり、stop の手前で止まります。

range(2, 7) のデモ
for i in range(2, 7):
    print(i)
# 出力: 2 3 4 5 6

range(2, 7) は 2, 3, 4, 5, 6 の5つを生成します。stop の値そのものは含まれない点が重要です。「7まで」ではなく「7の手前まで」と読むのがコツです。0-9 で学んだ range(5)range(0, 5) と同じ意味です。

ステップ2:ステップ数を変えよう(range の3引数形式)

3番目の引数 step を指定すると、増え幅を変えられます。step=2 なら1つおきに、step=3 なら2つおきに進みます。PycoBlocksでは「〇から△まで□ずつ繰り返す」ブロックがこれに対応します。

range(1, 10, 2) — 奇数を表示
for i in range(1, 10, 2):
    print(i)
# 出力: 1 3 5 7 9

range(1, 10, 2) は 1 から 10 の手前まで 2 ずつ進むので1, 3, 5, 7, 9 の5つを生成します。「1〜9 の奇数」を一発で表せます。step=3 にすれば3の倍数リストも同様に作れます。

ステップ3:逆順に数えよう(step をマイナスに)

step をマイナスにすると、数を減らしながら繰り返せます。カウントダウンや逆順処理に使います。range(5, 0, -1) は 5, 4, 3, 2, 1 を生成します(0は含まない)。

range(5, 0, -1) — カウントダウン
for i in range(5, 0, -1):
    print(i)
# 出力: 5 4 3 2 1

step がマイナスのときは start > stop にする必要があります。逆にすると何も出力されません。range(5, 0, -1) は「5から始めて 0 の手前まで −1 ずつ」と読みます。

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

コードで書くと、3形式の違いが一覧でわかります。さらに list() を使うと range が生成する数列を確認できます。

# 1引数: 0〜N-1
print(list(range(5)))        # [0, 1, 2, 3, 4]

# 2引数: start〜stop-1
print(list(range(2, 7)))     # [2, 3, 4, 5, 6]

# 3引数: start〜stop-1、stepずつ
print(list(range(1, 10, 2))) # [1, 3, 5, 7, 9]

# 逆順
print(list(range(5, 0, -1))) # [5, 4, 3, 2, 1]

# 応用: 偶数の合計
total = sum(range(2, 101, 2))
print(total)  # 1〜100の偶数の合計 → 2550

sum(range(...)) のように range を直接 sum() に渡せます。リストを作らずに合計を計算できるため、大きな範囲でも効率的です。このように range はリストに変換せずそのまま for や sum に使えるオブジェクトです。

演習課題

課題10-1:2〜10の偶数を表示しよう

range(start, stop, step) を使って、2, 4, 6, 8, 10 を1行ずつ表示してください。

▶ 模範解答と解説を見る

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

模範解答:偶数を表示
for i in range(2, 11, 2):
    print(i)

解説: range(2, 11, 2) で 2 から 10 まで 2 ずつ進みます。stop は 含まれないので、10 を含めるには stop=11 にします。この「stop は含まない」ルールはオフバイワンミスの原因になりやすいので要注意です。

課題10-2:10からのカウントダウンを表示しよう

10, 9, 8, ... 1 と逆順に表示するプログラムを range で作ってください。最後に「発射!」と表示しましょう。

▶ 模範解答と解説を見る

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

模範解答:カウントダウン
for i in range(10, 0, -1):
    print(i)
print("発射!")

解説: range(10, 0, -1) で 10 から 1 まで −1 ずつ数えます。0 は含まれません。print("発射!") はループの外(インデントなし)に置くことでカウントダウン終了後に1回だけ表示されます。

課題10-3:九九の3の段を range で表示しよう

range(1, 10) を使って、3 × 1 = 3 から 3 × 9 = 27 まで9行を表示してください。0-9 の課題9-2と同じ内容をよりシンプルに書いてみましょう。

▶ 模範解答と解説を見る

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

模範解答:九九の3の段
for i in range(1, 10):
    print(f"3 × {i} = {3 * i}")

解説: 0-9 の課題9-2「九九の3の段」と同じ出力が range(1, 10) で実現できます。range(0, 10) にすると「3 × 0 = 0」が先頭に出てしまいます。開始値を 1 にすることの意味を確認してください。

課題10-4:1〜100の奇数の合計を求めよう

range と変数への累積加算を使って、1, 3, 5, ..., 99 の合計を求めてください。答えは 2500 になります。

▶ 模範解答と解説を見る

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

奇数の合計を求めるブロック例
total = 0
for i in range(1, 100, 2):
    total += i
print(total)  # 2500

解説: range(1, 100, 2) で 1, 3, 5, ..., 99 の奇数を生成し、total += i で累積します。sum(range(1, 100, 2)) と一行で書くこともできます。どちらも同じ結果です。

課題10-5:逆順の九九(9の段)を表示しよう

9 × 9 = 81 から始まり、9 × 1 = 9 まで逆順に表示してください。step=-1 で逆順ループを使います。

▶ 模範解答と解説を見る

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

9の段を逆順に表示するブロック例
for i in range(9, 0, -1):
    print(f"9 × {i} = {9 * i}")

解説: range(9, 0, -1) で 9 から 1 まで逆順に進みます。i が 9→1 の順に変わるので、九九が 81→9 の逆順になります。step がマイナスのときは start > stop にする点に注意してください。

まとめ

  • range(start, stop) は start〜stop-1 の整数を生成する(stop は含まない)
  • range(start, stop, step) で増え幅を自由に設定できる
  • step をマイナスにすると逆順ループになる(start > stop にすること)
  • range(N)range(0, N, 1) の省略形
  • list(range(...)) で生成される数列を確認できる

次は while ループを学びます。for が「回数が決まっている繰り返し」に向いているのに対し、while は「条件が True の間ずっと繰り返す」場合に使います。→ Python × 入門 | #11 whileループで繰り返そう

PAGE TOP