for文を使ったループ処理でよく使われるrange()関数。
組み込み関数であるrange()関数について解説します。
1. for文とrange()関数を使ったループ処理
表記方法は以下の通り。
>>> for 変数 in シーケンス型:
... 実行したい処理
上記で出てくるシーケンス型とは、リストやタプル、range()関数など順序がある複数の要素を持つデータ型のことです。
◆ range()関数を使って、0〜4の値を表示してみます。
>>> for i in range(5):
... print(i)
0
1
2
3
4
◆ 次にrange()関数を使って、ループ処理の試行回数制御してみます。
例えば、『ユーザにPassword入力をさせる。ただし、3回間違えたらErrorを返す。』ようにしてみましょう。
>>> for i in range(3):
... pwd = input('Please input your password : ')
... if pwd == 'abcd':
... print('Success!!')
... break
... else:
... if i < 2:
... print('Incorrect!!')
... else:
... print('Failed')
... break
### Login成功 ###
Please input your password : a
Incorrect!!
Please input your password : abcd
Success!!
### Login失敗 ###
Please input your password : a
Incorrect!!
Please input your password : b
Incorrect!!
Please input your password : c
Failed
なんだかそれっぽく書けました。
2. range()関数の返り値はrange型
listを生成したり、for文を使ったループでよく使うrange()関数。
そもそも何者なのか?
range()関数はlistっぽく振舞うので、list型と思いがちですが、実はrange型と呼ばれるオブジェクトです。
これは、繰り返しアクセスすることで、順番に要素を返すイテレータです。
どこが便利なの?
例えば、0〜9999の要素を持つlistを作りたいとします。
num_list = [0, 1, 2, …, 9998, 9999]
と書くよりは、、、
num_list = list(range(10000))
と書いた方が、すごくシンプルですよねー。
見た目のシンプルさ、だけでなくメモリなどのリソース観点でもメリットがあると考えられますので、覚えておきましょう!