3日目のゴールとテーマ
3日目のテーマは「同じことを“くり返す”力を手に入れる」です。
昨日までは、「1回だけの処理」や「条件で分かれる処理」でした。
今日はそこに、
同じ処理を何回も自動でくり返す
「何回くり返すか」を変数でコントロールする
くり返しと条件分岐を組み合わせて“ちょっとしたロジック”にする
ここまでを狙います。
キーワードは for と while です。
くり返しの基本イメージ
「人力でコピペ」から「コンピュータに任せる」へ
例えば、1〜5までの数字を順番に表示したいとします。
くり返しを知らないと、こう書くしかありません。
print(1)
print(2)
print(3)
print(4)
print(5)
Python動きはしますが、6までにしたくなったら? 10までにしたくなったら?
全部書き直しです。しんどい。
ここで登場するのが「くり返し」です。
「このパターンを、数字だけ変えながら何回もやって」とコンピュータに頼めるようになります。
for文の基本:rangeとセットで覚える
「0から順番に数字を取り出してくれる仕組み」
Pythonで一番よく使うくり返しは for 文です。
まずはこれを見てください。
for i in range(5):
print(i)
Python実行結果はこうなります。
0
1
2
3
4
ここで起きていることを分解します。
range(5) は、「0, 1, 2, 3, 4」という“数字の列”を表すfor i in range(5): は、「その列から順番に値を取り出して、i に入れていく」
インデントされた print(i) が、取り出した値ごとに1回ずつ実行される
つまり、「i が 0 のときに print」「i が 1 のときに print」…を自動でやってくれています。
rangeの「開始値」と「終了値」を指定する
「1から10まで」など、好きな範囲を回す
range は、引数を2つ渡すこともできます。
for i in range(1, 6):
print(i)
Python実行結果はこうです。
1
2
3
4
5
ポイントは、「開始値は含まれる」「終了値は含まれない」です。range(1, 6) は「1, 2, 3, 4, 5」を表します。
このルールは最初ちょっと違和感がありますが、
「終了値は“ここまで”ではなく“ここまでの手前”」と覚えてください。
例えば、「1〜10」を表示したければ range(1, 11) です。
くり返しで計算してみる:合計を求める
「1〜10の合計」を人力でやらない
「1〜10の合計を計算したい」とします。
くり返しを使わないと、こうなります。
total = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
print(total)
Pythonもちろん動きますが、11までにしたら? 100までにしたら?
現実的ではありません。
くり返しを使うと、こう書けます。
total = 0
for i in range(1, 11):
total = total + i
print("合計は" + str(total) + "です")
Python流れを丁寧に追います。
最初に total = 0 で合計の初期値を0にするfor i in range(1, 11): で、i が 1, 2, 3, …, 10 と変わりながらブロックをくり返す
毎回 total = total + i で、「今までの合計」に「今回の i」を足していく
最後に、合計を表示する
ここでの超重要ポイントは、「total = total + i」という書き方です。
これは「total に i を足して、結果をまた total に入れ直す」という意味です。
「+=」というよく使う書き方
total = total + i を短く書く
さっきの total = total + i は、Pythonではよくこう書き換えます。
total += i
Pythonこれは完全に同じ意味です。
同じように、
x = x + 1 → x += 1
x = x - 1 → x -= 1
x = x * 2 → x *= 2
Pythonのように書けます。
特に「1ずつ増やす」「合計を足していく」ときに、+= は頻出です。
読み書きに慣れておくと、コードがスッキリします。
forとifを組み合わせる:偶数だけの合計
「条件を満たすものだけを対象にする」
くり返しと条件分岐を組み合わせると、一気に表現力が上がります。
例えば、「1〜10のうち、偶数だけの合計」を求めてみましょう。
total = 0
for i in range(1, 11):
if i % 2 == 0:
total += i
print("偶数の合計は" + str(total) + "です")
Pythonここで新しく出てきたのが % です。
これは「割り算の余り」を求める演算子です。
i % 2 == 0 は、「i を2で割った余りが0か?」つまり「i は偶数か?」という条件です。
偶数のときだけ total += i が実行され、奇数のときはスキップされます。
この「くり返しの中で if でふるいにかける」パターンは、
現実のアプリでもめちゃくちゃよく出てきます。
while文:条件が真のあいだ、ずっとくり返す
「何回くり返すか決められないとき」に使う
もう一つのくり返しが while 文です。
count = 0
while count < 5:
print(count)
count += 1
Python実行結果はこうです。
0
1
2
3
4
流れを分解します。
最初に count = 0while count < 5: をチェック → 最初は 0 < 5 なので True
ブロックの中を実行(print と count += 1)
ブロックが終わったら、また while の条件に戻る
count が 5 になったとき、5 < 5 は False なのでループ終了
for は「回数が決まっているくり返し」に向いていて、while は「条件が満たされているあいだ続ける」タイプです。
whileでよくある“無限ループ”に注意
条件がずっとTrueだと、終わらない
while で一番やりがちなのが、「条件がずっと変わらない」パターンです。
count = 0
while count < 5:
print(count)
# count += 1 を書き忘れた!
Pythonこの場合、count はずっと 0 のままなので、count < 5 は永遠に True です。
結果として、同じ表示が延々と続く「無限ループ」になります。
while を書くときは、
ループの中で、条件に関係する変数がちゃんと変化しているか
いつか必ず条件が False になる道筋があるか
を必ず確認してください。
3日目のミニアプリ:簡単な「貯金シミュレーター」
毎月の貯金をくり返して、何ヶ月で目標に届くか
ここまでの要素をつなげて、小さなアプリを作ってみます。
仕様はこうです。
毎月一定額を貯金する
目標金額を入力してもらう
何ヶ月で目標に届くかを計算して表示する
まずは while を使ったバージョンです。
print("=== 貯金シミュレーター 3日目バージョン ===")
target_text = input("目標金額を入力してください(円): ")
monthly_text = input("毎月の貯金額を入力してください(円): ")
target = int(target_text)
monthly = int(monthly_text)
total = 0
month = 0
while total < target:
month += 1
total += monthly
print(str(month) + "ヶ月目: 合計" + str(total) + "円")
print("目標の" + str(target) + "円に到達しました!(" + str(month) + "ヶ月かかりました)")
Python流れを丁寧に追います。
目標金額と毎月の貯金額を入力してもらい、整数に変換total に現在の貯金額、month に経過月数を入れる(最初はどちらも0)while total < target: で、「まだ目標に届いていないあいだ」くり返す
ループの中で、月数を1増やし、貯金額を毎月分増やす
その時点の合計を表示する
目標に届いたらループを抜けて、最後のメッセージを表示
ここでの重要ポイントは、「ループの中で total が増えていくから、いつか total < target が False になる」ということです。
これがさっきの「無限ループを避ける」考え方そのものです。
forで作る「回数が決まっている」バージョン
「とりあえず12ヶ月分だけシミュレーションする」
同じ貯金シミュレーターでも、「1年分だけ見たい」と決めるなら for も使えます。
print("=== 貯金シミュレーター(12ヶ月バージョン) ===")
monthly_text = input("毎月の貯金額を入力してください(円): ")
monthly = int(monthly_text)
total = 0
for month in range(1, 13):
total += monthly
print(str(month) + "ヶ月目: 合計" + str(total) + "円")
print("1年後の貯金額は" + str(total) + "円です。")
Pythonここでは、「12回くり返す」と最初から決めているので、for month in range(1, 13): がしっくりきます。
同じ“貯金”というテーマでも、
「いつ目標に届くか分からない → while」
「何回やるか決まっている → for」
という使い分けができるようになると、かなり気持ちよく書けるようになります。
3日目で一番大事な感覚
「コンピュータは、同じことをくり返すのが得意すぎる」
今日あなたに持ってほしい感覚はこれです。
人間が「めんどくさい」と感じる、
「同じパターンを何十回もやる」作業は、
コンピュータにとっては“ごちそう”みたいなものです。
for は、「何回くり返すか」が決まっているときのくり返し。
while は、「条件が満たされているあいだ続ける」くり返し。
その中で、変数を少しずつ変えながら、合計を出したり、条件でふるいにかけたりする。
この感覚がつかめると、「あ、これもループで書けるな」がどんどん見えてきます。
3日目のまとめ
今日のキーポイントを短く整理すると、こうなります。
for 変数 in range(回数): で、決まった回数のくり返しが書ける。range(開始, 終了) は「開始を含み、終了の手前まで」の数字の列。
合計などを出すときは、「初期値を0にして、ループの中で += していく」が基本パターン。while 条件: は、「条件が真のあいだずっとくり返す」ループ。
while では、「条件に関係する変数がちゃんと変化して、いつかFalseになるか」を必ず確認する。
もし余裕があれば、今日の貯金シミュレーターを少しアレンジしてみてください。
例えば、
毎月の貯金額に「ボーナス月だけ多め」を入れてみる
目標に届かなかったら「あといくら足りないか」も表示する
「目標金額」「毎月の貯金額」「年数」を入力して、どれかを計算する
など、くり返しと条件を組み合わせる練習はいくらでも作れます。
「これ、人間が手でやるとダルいな」と思ったら、「ループで書けないか?」と一度考えてみてください。
