どうも、としです。
今回はPython講座第6章としてfor文の解説をしていきたいと思います。
このfor文って何なのかっていうと、、
繰り返しのプログラム
になります。
内容としては
・rangeを使用して指定回数繰り返す処理をする
・リストでfor文を使用する
・辞書でfor文を使用する
という流れでやっていきます。
目次
rangeの使い方
最初はrangeを使用して繰り返しの処理をやっていきます。
コードはこちらです。
for i in range(5):
print(i)
print('プログラムが終了しました')
でっ、ここで1つ用語を覚えてほしいのですが、、
インデント
この用語を覚えてくださいね。
インデントが何かというと、
文の最初の部分に空白を挿入する機能や行為
この事をインデントと言います。
なんでこの用語を覚えるのかというと、Pythonではインデントがめちゃくちゃ重要です。
というのもコード内でfor文を作成しているわけですが、、
そのfor文で実行しているプログラムはインデントされているのが分かると思います。
上でいう2行目のprint(i)の部分ですね。
だけど3行目のprint(‘プログラムが終了しました’)の部分にはインデントがないですよね。
こうやってPythonではインデントを付けることで、どこからどこまでが繰り返し処理をするのかをプログラムが分かるようにしているわけです。
rangeの解説
実際にプログラムの解説をしていきますね。
for i in range(5):
print(i)
print('プログラムが終了しました')
まずはfor文の書き方ですね。
rangeを使用する場合には、、
for 変数 in range(繰り返しの回数):
というので書いていきます。
忘れがちな部分としては最後に『:』(コロン)を付ける所ですね。
でっ、forのあとに変数があるのですが、この変数がなんで必要なのかっていうと、、
そこに値を入れていくんですね。
今回のプログラムではrange(5)って書いてあるのですが、、
range(5)っていうのは、、
5回繰り返します
というよりも詳しく解説すると
0から4の数字を順番に変数に入れて繰り返し処理をしてください
という処理になっています。
0から4って5回の繰り返しですよね。
その値を順番にこの変数のところに入れていきますよっていうが
for i in range(5):
というものになるんですね。
でっ、そのあとにprint(i)というのをインデントを付けて書いています。
これは上でも話しているように、繰り返しの処理としてどういったことをやるかの内容です。
なのでプログラムを動かすと、、
5回繰り返すprint(i)の結果としてiに代入された値である、0~4が出力される。
そうしたらfor文が終了して、最後のprint文で「プログラムが終了します」という文字が出力されるということですね。
●for文の重要ポイント
『:』で終わらせる
処理はインデントをする
rangeの別の使い方
こんな感じでfor文でrangeを使用したのですが、、
少しrangeの複雑な使い方をしたいと思います。
さっきだったらrange(5)として単純に5回繰り返すという処理をしました。
でもrangeにはこういった書き方もあるんですね。
for x in range(1,6):
print(x)
print('プログラムが終了しました')
さっきと何が違うのかと言ったらrangeの後の数字ですね。
range(1,6)っていうふうに書いてありますね。
これが何なのかっていうと、、
さっきだったらrange(5)で5回繰り返します。
0~4という値を変数に代入していったわけですよね。
でも例えばこれを0からじゃなくて指定の数字から指定の数字まで繰り返したい場合って多いです。
その時に使用するのがこの
range(1, 6)
という書き方です。
でっ、この『,』で区切った左側の数字ですね。
これが開始する数字になります。
でっ、処理としては左側の数字から始まって右側の数字まで繰り返す、、
というのは間違いです。
これはプログラムの処理の部分なのですが、0というのが最初の値になります。
そのため右側の数字を-1にした数まで繰り返すという処理になります。
- 左側:開始する数字
- 右側-1:終了する数字
ちょっとややこしいのですが、こう覚えてくださいね。
ということでこのプログラムを実際に動かすと、、
1、2、3、4、5という数字が出力される。
最後にプログラムが終了しましたという文字が出力されるという動きになります。
という感じでfor文でrangeを使用して繰り返しの処理の解説をしたのですが、、
Pythonプログラムを組む場合に、このrangeを使って繰り返すという処理ってあまりやらないです。
じゃあどうやって使うのかというと、、
第5章で解説したリストや辞書を使用した繰り返しです。
リストを使ったfor文
前回の章でリストから値を取得する方法として、
item_list = ['item1', 'item2', 'item3', 'item4', 'item5']
print(item_list[0]) # 出力→item1
こういった方法で取得をかけていました。
だけどリストの場合には、こうやってインデックスで1つずつ取得するというのはあまりやらないです。
じゃあどうやって取得するのかというと、、
それが今回のfor文を活用します。
リストの値をfor文で取得する
上でも話しているように
item_list = ['item1', 'item2', 'item3', 'item4', 'item5']
こういったリストの0番目の値を取得したい場合には、
print(item_list[0])
という方法で取得しますよね。
だけどこうやって1つずつではなくて、、
「そのリストの中に入っている数字を順番に全部取り出したい」
っていうことがかなり多いんですね。
それが可能になるのがこのfor文で
item_list = ['item1', 'item2', 'item3', 'item4', 'item5']
for item in item_list:
print(item)
こんな感じで
for 変数 in リスト:
ということをやってあげるとリストの中身を順番に変数に代入して繰り返すという処理を行うことができます。
実際やってみるとリストの中身の
item1、item2、item3、item4、item5という文字が順番に出力。
最後にプログラムが終了という文字列が出力されます。
for文の活用として、この使い方がかなり多いです。
いろいろなデータを集めてきて、そのデータを精査したい。
もちろんこれだけではただ繰り返しの処理なんですが、、
これは7章と8章の話ですが、if文を使って条件分岐をさせることで複雑な処理を行うことが出来るようになります。
本当によく使う方法なので、
『リストを順番に取り出すためにfor文を使う』
これはぜひ覚えておいてくださいね。
enumerateで順番も取得する
でっ、これはちょっと補足的な部分なのですが、、
リストをfor文で取得するときに順番も取得したいということが結構多いです。
例えば僕の場合であれば物販のシステムを作っていて、、
価格の情報っていうものを自動で更新させるシステムを組んでいます。
その価格情報って何千商品もあります。
その何千商品中の何番目の商品を今やっているのかなっていうものを判断したい
こういった時があるんですね。
そのときに今何番目の処理をしていますというのを簡単に出す方法があって、、
それがenumerateというものになります。
さっきまでだったら
for 変数 in リスト:
という書き方でしたが、このリストの部分をenumerateで括ってあげます。
for 変数1, 変数2 in enumerate(リスト):
こういった書き方ですね。
今までだったら変数は1つだったのですが、今回は順番の為の変数も必要なのでinの前に2つ変数を指定しています。
実際にコードにするなら
item_list = ['item1', 'item2', 'item3', 'item4', 'item5']
for item_num, item in enumerate(item_list):
print(f'{item_num}を確認中:{item}')
こんな感じですね。
変数1に連続した番号。
※1からではなく0から開始されるので注意
変数2にリストの中身。
こういった内容が入ってきます。
なので結果としては、、
- 0を確認中:item1
- 1を確認中:item2
- 2を確認中:item3
- 3を確認中:item4
- 4を確認中:item5
こういった結果になるわけですね。
●f文字列
文字列を指定する「’」「”」の前にfを付けることでf文字列というものを使用出来ます。
この中で「{変数}」を使用すると変数の中身を取り出されます。
for文の中で僕は結構使ったりとかもする機能だったので、1つ補足として話をさせてもらいました。
辞書でfor文を使用する
次は辞書の場合にはどうやってfor文を使うかということを話していきますね。
実際for文を使って辞書の値を出力かけること僕はあまりやらないです。
というのも辞書って、、
英語の辞書とか国語辞書とかをイメージしてもらいたいのですが。
何かを調べるときに辞書の先頭から調べることってないですよね。
例えばenumerateっていう単語を調べたいときに、Aから辞書を見ていかないですよね。
辞書なのでenumerateっていう単語だったらeから始まる単語で、、
みたいな感じで意味を調べるわけじゃないですか。
それと同じようにこのPythonの辞書も使うので、前回やったkeyで指定してvalueを取得するというのが基本になります。
でも一応このfor文を使っても出力することも出来るので、その方法を一通り解説していきますね。
今回はこういった辞書を用意します。
name_score_dic = {'suzuki':55, 'tanaka': 80, 'saito': 90}
keyを苗字にしてvalueとして得点を紐づけている辞書になります。
リストと同じ取得方法
最初はリストと同じようにな方法です。
name_score_dic = {'suzuki':55, 'tanaka': 80, 'saito': 90}
for name in name_score_dic:
print(name)
ぱっと見ると辞書のkeyとvalueが順番に取得出来そうですよね。
だけど実際このプログラムを動かしてみると。
- suzuki
- tanaka
- saito
というkeyのみが出力されます。
keyもvalueも取得したい
keyとvalueどちらも出力したい場合には、まず2つの変数が必要になります。
その上で辞書にitems()というものを付ける必要があります。
name_score_dic = {'suzuki':55, 'tanaka': 80, 'saito': 90}
for name, score in name_score_dic.items():
print(f'{name}は{score}点です。')
こう書いてあげると出力されるのは、
- suzukiは55点です。
- tanakaは80点です。
- saitoは90点です。
こんな感じで名前と得点のどちらも取得する事が出来ます。
keyのみを取得
リストと同じやり方でもkeyのみを取得することは出来るのですが、基本的にkeyを取得する時にはこういった書き方をします。
name_score_dic = {'suzuki':55, 'tanaka': 80, 'saito': 90}
for name in name_score_dic.keys():
print(name)
辞書の後にkeys()というものを付けると辞書の中のkey部分だけを取得出来ます。
valueのみを取得
valueのみを取得したい場合にはこういった書き方です。
name_score_dic = {'suzuki':55, 'tanaka': 80, 'saito': 90}
for score in name_score_dic.values():
print(score)
辞書の後にvalues()というものを付けるとvalue部分だけを取得出来ます。
といった感じで簡単にですが、for文を使用して辞書からデータを取得する方法の解説でした。
まとめ
といった感じで今回for文について解説をさせてもらいました。
最後おさらいをしておくと
・for文の最後は『:』で終わる
・インデントを付けた部分がfor文として処理される
・rangeで繰り返しの回数を決めることが出来る
・for文を使うとリストや辞書の中身が取り出せる
こういった内容でした。
この繰り返しというのはPythonだけでなく、どのプログラミング言語でも使うものになります。
その中でもPythonではリストを扱うときにとても便利な機能です。
なのでぜひfor文の使い方をマスターしてくださいね。
でっ、次回がif文ですね。
条件分岐というものについて話をさせてもらいたいと思います。
このfor文とif文をしっかりと理解がプログラムの大元の部分になります。
ここをしっかりと理解できればかなりプログラムを自分で組むことが出来るようになるので、ぜひ次回もお付き合いいただければと思います。