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

まずは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 の手前で止まります。

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では「〇から△まで□ずつ繰り返す」ブロックがこれに対応します。

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は含まない)。

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と同じ内容をよりシンプルに書いてみましょう。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

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 で逆順ループを使います。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

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ループで繰り返そう