2日目のゴールと今日やること
2日目のテーマは
「同じような print を何回も書く“めんどくささ”を、Python に丸投げする」 ことです。
1日目は、あえてこう書きました。
print(1)
print(2)
print(3)
print(4)
print(5)
Python今日は、これを
「Python に“1〜5まで順番に表示して”と頼む書き方」
つまり for 文による繰り返し に変えていきます。
新しく出てくるキーワードは for と range。
でも、やることはシンプルです。
- 「同じパターンを何回もやる」を、1行で表す
- 「何回目か」を、Python に数えさせる
- 「回数」と「表示する数字」の関係を、ちゃんとイメージでつかむ
ここをじっくりやります。
1日目の「手書きカウント」をもう一度眺める
手で書いた「1〜5カウント」
まずは、昨日のこのコードを思い出してください。
print(1)
print(2)
print(3)
print(4)
print(5)
Python実行すると、
1
2
3
4
5
と出ます。
これはこれで正しいし、動きも分かりやすい。
でも、もし「1〜100まで表示して」と言われたらどうでしょう?
print(1)
print(2)
print(3)
# ...
print(100)
Python…さすがにやってられないですよね。
この「同じパターンを何回も書くのはしんどい」という感覚が、
「繰り返し文がほしい理由」 です。
for 文の最小形を見てみる
まずは形だけ見てみる
いきなりですが、次のコードを見てください。
for i in range(1, 6):
print(i)
Pythonこれを実行すると、さっきと同じように
1
2
3
4
5
と表示されます。
たった2行で、さっきの5行分と同じことをやっています。
ここで出てきた新しいものは3つです。
for i in range(1, 6):iという名前range(1, 6)
ひとつずつ、かみ砕いていきます。
range(1, 6) は「1, 2, 3, 4, 5 の並び」
「1から5まで」を Python に作らせるイメージ
range(1, 6) は、ざっくり言うと
「1 から 5 までの数字の並び」
を表しています。
「え、6って書いてあるのに、なんで5までなの?」
ここが最初のつまずきポイントです。
Python の range(開始, 終わり) は、
- 開始の数字は「含む」
- 終わりの数字は「含まない」
というルールになっています。
だから、
range(1, 6)→ 1, 2, 3, 4, 5range(1, 4)→ 1, 2, 3range(3, 8)→ 3, 4, 5, 6, 7
というイメージです。
「終わりは“ここまでね”という境界線であって、その数字自体は入らない」
と覚えておくと、だんだん慣れてきます。
まずは range だけを print してみる(イメージ用)
実は、range(1, 6) をそのまま print すると、
ちょっと不思議な表示になります。
print(range(1, 6))
Pythonこれは、
range(1, 6)
Pythonと出るだけで、中身の数字は見えません。
なので、range は
「Python の中で、“1〜5の並び”を表す特別なオブジェクト」
くらいの理解でOKです。
大事なのは、
「range(1, 6) は、1〜5を順番に取り出すための“元データ”」
というイメージです。
for i in range(1, 6): の日本語訳
「i に 1, 2, 3, 4, 5 を順番に入れていく」
次に、for の行を日本語にしてみます。
for i in range(1, 6):
print(i)
Pythonこれは、こういう意味です。
「range(1, 6) が表す 1, 2, 3, 4, 5 を
i という変数に順番に入れながら、
そのたびに、インデントされた行(print(i))を実行する」
もう少し分解すると、
1回目:i に 1 が入る → print(i) → 1 を表示
2回目:i に 2 が入る → print(i) → 2 を表示
3回目:i に 3 が入る → print(i) → 3 を表示
4回目:i に 4 が入る → print(i) → 4 を表示
5回目:i に 5 が入る → print(i) → 5 を表示
という流れです。
ここで超重要なのは、
「for の下にインデントされた行は、“何回も繰り返される部分”」
だということです。
インデントは「この中身を何回もやる」の印
1日目の if と同じ構造を思い出す
もし、前のコースで if をやっていたなら、
少し似ていると感じるはずです。
if 条件:
この行は条件を満たしたときだけ実行
Pythonfor も同じように、
for 〜:
この行は何回も繰り返して実行
Pythonという構造になっています。
Python では、
ifの中身forの中身
を区別するために、
インデント(字下げ) がとても重要です。
インデントを外すとどうなるか
例えば、こう書くとどうなるか。
for i in range(1, 6):
print(i)
Pythonこれはエラーになります。
for の中で繰り返したい行は、
必ず前にスペース(普通は4つ)を入れて書きます。
インデントは、
「この行は、上の for にぶら下がっているよ」
という印です。
「1〜10までカウント」を一気に書いてみる
手書きバージョンと for バージョンの差を体感する
まずは、手書きバージョン。
print(1)
print(2)
print(3)
print(4)
print(5)
print(6)
print(7)
print(8)
print(9)
print(10)
Python次に、for バージョン。
for i in range(1, 11):
print(i)
Pythonたった2行で、さっきの10行分と同じことをしています。
ここで感じてほしいのは、
- 「書く量が減る」という楽さ
- 「何回やっているか」が
range(1, 11)で一目で分かること
です。
range(1, 11) は「1〜10まで」という意味。
「11は含まない」というルールを、ここでも確認できます。
「何回目か」をメッセージ付きで表示する
「i 回目です」と言わせてみる
カウントアプリっぽくするために、
「何回目か」をメッセージ付きで出してみましょう。
for i in range(1, 6):
print(i, "回目の処理です")
Python実行すると、
1 回目の処理です
2 回目の処理です
3 回目の処理です
4 回目の処理です
5 回目の処理です
と表示されます。
ここでやっていることは、
iには 1〜5 が順番に入るprint(i, "回目の処理です")で、
「i の値」と「”回目の処理です”」を並べて表示している
ということです。
print は、カンマで区切ると
「間にスペースを入れて並べて表示」してくれます。
「回数」と「中身」をセットで考える
例えば、こんなふうにもできます。
for i in range(1, 4):
print("=====")
print(i, "回目の処理開始")
print("ここで何かの処理をします(イメージ)")
print(i, "回目の処理終了")
Python実行すると、
=====
1 回目の処理開始
ここで何かの処理をします(イメージ)
1 回目の処理終了
=====
2 回目の処理開始
ここで何かの処理をします(イメージ)
2 回目の処理終了
=====
3 回目の処理開始
ここで何かの処理をします(イメージ)
3 回目の処理終了
というように、「1回分のまとまり」が
3回繰り返されているのが分かります。
「1回分の処理のかたまり」を、for の中に書く
これが、繰り返しカウントアプリの基本形です。
2日目の小さな仕上げ:「5回カウントアプリ」を for で書く
1日目の手書き版を、for で書き直す
1日目の最後に書いた、こんなコードを思い出してください。
print("===== カウントアプリ 1 日目 =====")
print()
print("1 回目")
print("2 回目")
print("3 回目")
print()
print("今日は 3 回まで数えました。")
Pythonこれを、for を使って書き直してみます。
print("===== カウントアプリ 2 日目 =====")
print()
for i in range(1, 6):
print(i, "回目")
print()
print("今日は", 5, "回まで数えました。")
Python実行すると、
===== カウントアプリ 2 日目 =====
1 回目
2 回目
3 回目
4 回目
5 回目
今日は 5 回まで数えました。
となります。
ここでのポイントは、
- 「1〜5までの“回数”」を、
forに任せている - 自分は「1回分の表示の形」だけを書いている
ということです。
2日目で特に深く理解してほしいこと
1つ目。range(開始, 終わり) は、「開始から終わりの1つ手前まで」の数字の並びを表す。range(1, 6) → 1, 2, 3, 4, 5 というイメージ。
2つ目。for i in range(1, 6): は、
「i に 1, 2, 3, 4, 5 を順番に入れながら、
インデントされた行をそのたびに実行する」
という意味だということ。
3つ目。
インデントされた行は、「ここが“繰り返されるかたまり”」だという印。for の中に書いたものが、「1回分の処理」になる。
この3つが、今日の核です。
3日目へのつなぎ
2日目までで、あなたはすでに、
1〜5、1〜10 のカウントを、for を使って書けるようになりました。
3日目からは、ここに
「回数に応じてメッセージを変える」
「何回目かによって、少しだけ中身を変える」
といった要素を足していきます。
最後にひとつ、あなたに聞きたい。
for i in range(1, 6): を書いて実行したとき、
「お、これで“何回も書かなくてよくなったな”」と
少しでもスッキリした感じはありましたか?
その「スッキリ感」が、
あなたと“繰り返し”の感覚をつなぐ大事な手応えです。
その感覚を持ったまま、3日目に進んでいきましょう。


