こんにちは。
おぎーです。
この記事では、forループとrangeについて初心者目線で優しく解説しています。
それでは早速学習を進めていきましょう。
Google Colaboratoryを開いてください。
インストールしていない方はこちらの記事を参考にインストールしましょう。
みなさん、こちらのコードを覚えていますでしょうか。
for i in range(100):
print("北斗百裂拳")
こちらの記事で、コードだけ紹介させていただいた、
北斗百裂拳を100回出力させるしょうもないコードです。
このしょうもないコードこそがループであり、
条件が満たされている間はコードをずっと繰り返します。
まずは、forループというものの基礎を学習しましょう。
目次
forループ
forループの構文は、こうです。
#このコードは出力できません。
for [変数の名前] in [イテラブル]
[コードブロック]
1行目のコードがあることによって、
2行目の[コードブロック]の内容が繰り返し処理されます。
このような反復処理を行う構文のことを、forループといいます。
[変数の名前]のところには、自分で自由に付けた名前を指定できます。
指定した変数名は、イテラブルの要素を割り当てるために使います。
イテラブルとは、
文字列、リスト、タプルのように、
繰り返し処理でつ1ずつ要素を取り出せるオブジェクトのことを指します。
[コードブロック]は1行以上のまとまりのあるコードのことで、
[コードブロック]の内容が繰り返し処理されることになります。
早速コードの例を見てみましょう。
文字列から1文字ずつ取り出す
x = "起承転結"
for y in x:
print(y)
こちらは、forループを使用して、文字列から文字を1つずつ取り出して出力するコードとなっています。
したがって、
起
承
転
結
といったように、順番に文字が取り出されて出力されます。
リストから要素を1つずつ取り出す
こちらのコードでは、リストから要素を1つずつ取り出すことができます。
x = ["こんにちは", "おはよう", "こんばんは"]
for y in x:
print(y)
こんにちは
おはよう
こんばんは
といった順番で出力されたと思います。
文字列と同様に、左側から順番に出力されていきます。
なぜ左側から出力されるのかと疑問に思う方がいれば、
インデックス番号を思い出してください。
左側から0、1、2という風に順番がありましたよね。
ループ処理ではこの順番が適用されています。
タプルから要素を1つずつ取り出す
今度はタプルから要素を1つずつ取り出すコードの例を見てみましょう。
ほとんど文字列とリストのときと変わりません。
x = ("こんにちは", "おはよう", "こんばんは")
for y in x:
print(y)
リストのときと同様に左側から順番に出力されたと思います。
辞書からキーを要素として1つずつ取り出す
リスト、タプルときたら辞書からも1つずつ取り出してみましょう。
x = {"やさい":"にんじん", "くだもの":"みかん", "あいさつ":"こんにちは"}
for y in x:
print(y)
やさい
くだもの
あいさつ
といったように、辞書のキーが順番に出力されましたか?
バリューではなくキーが出力されることは前提として覚えておきましょう。
この記事での話題とは異なりますが、
リスト、タプル、辞書の表記の違いについてキチンと違いを記憶していますか?
リストが角カッコ、タプルが丸カッコ、辞書が波カッコでしたね。
[リスト]
(タプル)
{辞書}
思い出したらすぐ復習するようにして定着させましょう。
記事のリンクも載せておきます。
ミュータブルなイテラブルの更新
ミュータブルなイテラブル、すなわち、
変更可能で繰り返し可能なオブジェクトを更新するためのコードの例を見てみましょう。
これまで見てきたコードと異なる部分が多いです。
x = ["hello", "good morning", "good night"]
for i, y in enumerate(x):
y = x[i]
y = y.upper()
x[i] = y
print(x)
解読できましたか?
ちょっと何言ってるのかよくわからないという方向けに丁寧に見ていきましょう。
まず1行目は、いいですね。
xというリストを作成しました。
次に2行目です。
まずenumerateと記されているものの働きについてです。
こちらは、enumerate関数といって、この関数にxを渡すことによって、
インデックス値を受けとる「i」を追加することが可能です。
まず「i」ってなんやねんって感じですよね。
「i」はインデックス変数といいます。
インデックス変数は、ループで取り出した要素が何番目なのかを示すものです。
これがあることによって、ループするごとにインデックス番号の0、1、2、、
というように順番にループ処理することができます。
3行目は、リストxの要素をインデックス番号の順にyに渡し(代入し)ますよ、
といった意味で、
次の4行目で、リストの要素を大文字にしています。
そして、5行目でyの値をx[i]に戻して(代入して)います。
ここまでがコードブロックで反復処理され、
最後の行、xのリストの出力が行われます。
したがって、出力されるのは、
[‘HELLO’, ‘GOOD MORNING’, ‘GOOD NIGHT’]
になります。
range
それでは、みなさんお待ちかねの北斗百裂拳100連発のお話です。
for i in range(100):
print("北斗百裂拳")
さきほどenumerate関数の話をしましたが、
rangeも関数です。
rangeは、整数を順番につくりだしてくれる関数です。
この関数では、開始と終了の2つの引数を指定できます。
上の例では、1つの値しか入力していないので、その値の回数ループ処理が行われることになりますが、
for i in range(1, 10):
print(i)
このように、入力すると、
#これは出力結果です
1
2
3
4
5
6
7
8
9
と出力されます。
このコードでは、rangeの次の丸カッコで、
(開始値, 終了値)
というように、引数を指定しています。
出力結果からも分かると思いますが、
開始値は出力結果に含まれる一方で、
終了値は出力結果には含まれません。
1から10まで指定したのに1から9までしか出力されていないのは、
そういった理由です。
先ほどのコードの例で変数を「i」としたのは、
整数のリストをループ処理する際に、
プログラマーがよく使用する変数名であるからです。
ぜひ覚えておいてください。
まとめ
今回は、forループとrangeについて学習しました。
前回までのコンテナの内容とつながりが大きかったですね。
少しづつですが、既存の学習内容を踏まえて新しいことを学習する機会が増えてきますので、ぜひ復習も行ってくださいね。
最後にまとめの問いです。
・小文字のリストを作成し、大文字で出力させてください。
・北斗百裂拳を2つの引数を使って100回出力させてください。
この記事で使用したコードはGitHubに載せておきますので、ぜひ活用してください。
GitHubでの閲覧方法は次の記事を参考にしてください。
それではまた次回お会いしましょう。
おぎー
“【Python初心者】ループ①(forループ・range)” への2件の返信