JavaScript | 1 日 90 分 × 7 日アプリ学習:ランダム表示アプリ(初級編)

Python
スポンサーリンク

2日目のゴールと今日やること

2日目のテーマは
「同じような print を何回も書く“めんどくささ”を、Python に丸投げする」 ことです。

1日目は、あえてこう書きました。

print(1)
print(2)
print(3)
print(4)
print(5)
Python

今日は、これを

「Python に“1〜5まで順番に表示して”と頼む書き方」
つまり for 文による繰り返し に変えていきます。

新しく出てくるキーワードは forrange
でも、やることはシンプルです。

  • 「同じパターンを何回もやる」を、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, 5
  • range(1, 4) → 1, 2, 3
  • range(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 条件:
    この行は条件を満たしたときだけ実行
Python

for も同じように、

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日目に進んでいきましょう。

タイトルとURLをコピーしました