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) startだけは省略できない
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の動画講座を書籍を買う感覚で購入してみた
その他
液晶ペンタブレットを買いました
(1) モバイルディスプレイを買うつもりだったのに激安ペンタブレット購入
以下、私が光回線を導入した時の記事一覧です。
(1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
(2) NURO光の開通までWiFiルーターを格安レンタルできる
(3) NURO光の屋外工事の状況をご紹介。その日に開通!
(4) 光回線開通!実測するとNURO光はやっぱり速かった
(5) ネット上のNURO光紹介特典は個人情報がもれないの?