Python♪基本:range()の基本的な使い方は完璧に覚えておこう

 Pythonの組み込み関数であるrange()は、最も重要な関数のうちの1つではないかと思います。でも、最初に慣れる少しの間は、「あれ、どうだっけ?」となってしまう関数でもあります。Pythonを始めたばかりの人にイメージがつかめるようにrange()の使い方を図にしてみました。

 中学生のゆうちゃんはrange()が示す数字の範囲について、1ぐらいのずれは気にならないらしく、いつも、ひっかっかって、「なんで~」とエラー消しを付き合わされます。フィーリングで会話が通じる人間とのギャップがあるようなので、「Pythonは真面目なのよ~。あなたの言うことはなんでも文句も言わず、そのとおりに実行してくれるから気をつけてあげてね」というのですが、すぐに「えっ、なんで~」となります。

 そこで、かわいい中坊のためにrange()使い方を図にしてみました。喜んでくれるかな?

0.「ゆうちゃんとPython」「チュートリアル」シリーズ

この記事は、 「ゆうちゃんとPythonシリーズ」 「Pythonチュートリアルのポイント整理シリーズ」 の記事です。一連の記事は、以下のリンク集を参照してください。

中学生のゆうちゃんとPythonシリーズ
「Pythonチュートリアル」のポイント整理シリーズ

なお、「ゆうちゃんとPythonシリーズ」 の記事では、シリーズの中でそれまでに習った文法を使ってサンプルコードを考えています。実際には、もっと、効率のよい書き方があるかもしれませんが、ご了承ください。

2.range()関数の基本

range(start, end, step)

range()関数は上の式の「start」からはじまり、「end」の1つ手前までの数を順番に出力する関数です。そして、増分ステップは「step」です。なお、「start」「end」「step」には整数を指定し、少数は使えません。重要なのは「end」の1つ手前までの数を出力することです。

range()は「レンジ」とよみます。英語の発音は「レインジ」ですが、調理器具の「ガスレンジ(gas range)」と同じスペルで、日本語読みは「レンジ」が使われることが多いようです。まずは、for文とセットで覚えることになると思います。

ExcelのVBAでは「for i=0 to 5 step 1」と記述するのが、Pythonでは「for i in range(6)」となります。VBAの方が直感的にはわかりやすいですね。Pythonの表記は無駄がないのですが、慣れないと少し戸惑うと思います。

(1) 増分ステップがプラスの場合

 以下、増分ステップがプラスの場合の例を図示します。range(-4, 6, 2)は、-4以上、6以下ではなく、-4以上、5以下の数字となります。これを、ついつい間違えてしまうので気をつけましょう。そして、-4から2ずつ増加するので、-4 → -2 → 0 → 2 → 4となります。5以下の数字なので、6は入りません。

 以下、for文にrange()関数を使った例です。この中のrange(-4, 6, 2)は、-4 → -2 → 0 → 2 → 4となりますので、for文では、forとinの間にある変数iを-4 → -2 → 0 → 2 → 4と変化させながら繰り返します。つまり、print(i)は5回繰り返され、iがそのたびに変化するので、出力結果は、以下の出力01のようになります。

#コード01
for i in range(-4, 6, 2):
    print(i)
#出力01
-4
-2
0
2
4

(2) 増分ステップがマイナスの場合

 増分ステップがマイナスの場合も、増分ステップがプラスの場合と考え方は同じです。ただ、-6の1つ手前というのは、startの4に近い側なので、-5となります。

#コード02
for i in range(4, -6, -2):
    print(i)
#出力02
4
2
0
-2
-4

(3) range()関数の引数の省略

 range(0, 4, 1)の括弧のなかの0, 4, 1を引数(ひきすう)といいます。rangeの引数は3つありますが、この引数を省略できる場合があります。

(a) step=1ならば、省略できる。

range(start, end, 1) → range(start, end)

(b) start=0, step=1ならば、省略できる。

range(0, end, 1) → range(end)

(c) statだけは省略できない

range(0, end, step) → × range(end, step)

(d) サンプルコード

例えば、コード03のrange(0, 4, 1), range(0, 4), range(4)の出力結果は、まったく同じになります。

#コード03
print('range(0, 4, 1):')
for i in range(0, 4, 1):
    print(i)
    
print('range(0, 4):')
for i in range(0, 4):
    print(i)
    
print('range(4):')
for i in range(4):
    print(i)
#出力03
range(0, 4, 1):
0
1
2
3
range(0, 4):
0
1
2
3
range(4):
0
1
2
3

3.range(start, end)のstartとendの値を逆にすると?

 range(start, end, step)のstartとendの値を、増分stepの向きと逆にすると、エラーにはなりませんが、for文は一度も実行されないまま終了します。

#コード04
print('----------')
for i in range(2, -1):
    print(i)
    
print('----------')
for i in range(-2):
    print(i)
    
print('-----end-----')
#出力04
----------
----------
-----end-----

 range()関数の基本事項は、なんとなく覚えているというのではなく、プログラムの勉強する前に必ず読み返して、完璧に覚えましょう。

私が実際に購入した教材のご紹介

以下、私が実際に購入したPythonの教材をまとめてみました。 Pythonを学習する上で、少しでもお役に立つことができればうれしいです。

Python♪私が購入したPythonの書籍のレビュー

UdemyのPythonの動画講座を書籍を買う感覚で購入してみた