![見出し画像](https://assets.st-note.com/production/uploads/images/83267152/rectangle_large_type_2_5ebba37f45bf6eaf7a6085d9a930177f.png?width=1200)
【Python】SimplePrograms line 3 for文を使ってみよう(繰り返し処理)
3行プログラムです。
コード
friends = ['john', 'pat', 'gary', 'michael']
for i, name in enumerate(friends):
print ("iteration {iteration} is {name}".format(iteration=i, name=name))
実行結果
iteration 0 is john
iteration 1 is pat
iteration 2 is gary
iteration 3 is michael
解説
「print」が、だんだん凝ったものになってきますね。
まず、1行目。
friends = ['john', 'pat', 'gary', 'michael']
これはリストを生成しています。
「friends」を表示するとこんな風に。
>>> print(friends)
['john', 'pat', 'gary', 'michael']
>>>
「friends」を個別に表示するとこんな風になります。
>>> print(friends[0])
john
>>> print(friends[1])
pat
>>> print(friends[2])
gary
>>> print(friends[3])
michael
>>>
次は「for」文。
この「for」文。ちょっとやっかいですね。
「friends」のリストの中身を表示するプログラムは、一番基本的な形はこんな風になります。
for name in friends:
print(name)
これは
「friends のリストの中身を1つ name に取り出して name を表示する。これを、 frieds の全リスト分繰り返す。」
というプログラムです。
この場合、実行結果は次のようになります。
john
pat
gary
michael
「SimplePrograms」の for 文は、これとは少し違います。
(1) 「i」がある
(2) 「enumerate」がある
「enumerate」から考えてみましょう。
「enumerate」を追加してみます。
for name in enumerate(friends):
print(name)
実行結果はどうなるでしょうか。
(0, 'john')
(1, 'pat')
(2, 'gary')
(3, 'michael')
なるほどねぇ。
「name」が「0、1、2、3、・・・」のように、ナンバリングされてますね。
ちなみに「enumerate」という英単語には「数え上げる」という意味があるようですが、まさに数えあげています。
「name」から、番号と名前にアクセスできるのでしょうか。
for name in enumerate(friends):
print(name[0], name[1])
0 john
1 pat
2 gary
3 michael
なるほど。
「name」は、番号と名前をリストで持っているようです。
最初のコードは、こんな風にも書けるんですね。
for name in enumerate(friends):
print("iteration %d is %s" % (name[0], name[1]))
とすると「i」の目的も見えてきました。
こうやって、「( )」でくくるとわかりやすいかもしれません。
for (i, name) in enumerate(friends):
print("iteration %d is %s" % (i, name))
「i」ではなくて「iteration」とした方がわかりやすいでしょうか。
こんな感じ。
for (iteration, name) in enumerate(friends):
print("iteration %d is %s" % (iteration, name))
もうこれで十分な気がするけど、「SimplePrograms」の「print」文はさらに違います。
print ("iteration {iteration} is {name}".format(iteration=i, name=name))
何でしょうねぇ、これは。
まず「.format」とあるけれども、これは
「文字列クラスの format メンバ」
ということのようです。
文字列「"iteration {iteration} is {name}"」のメンバということですね。
C++ は C を引きずったので、「"iteration {iteration} is {name}"」だけではクラスにはならなかったんだけれども、すべてのオブジェクトがクラスだとすれば、どんなオブジェクトもメンバを持つということでしょうか。
ちなみに「format」については、こちらに記載されています。
「"iteration {iteration} is {name}"」は「書式指定文字列」。
「{ }」は「置換フィールド」の意味になります。
「%s」や「%d」などと同じで
「後で別のものに置き換えますよ」
ということを意味します。
置換する内容は「format」の引数で
「iteration=i」や
「name=name」
と書いて、何に置換するのかを指定しています。
ですから、Python の書式指定には、
「%s」や「%d」のような C 言語に似たものと
「{iteration}」のような独自のものの
2種類があるようです。
あるいは、もっと他にもあるのかもしれません。
間違いや改善方法、追加情報などありましたら、是非是非コメントくださいませ。
この記事が気に入ったらサポートをしてみませんか?