Python | 2週間で身につく、アプリを作りながら学ぶPythonの基本 - 3日目

Python Python
スポンサーリンク

3日目のゴールとテーマ

3日目のテーマは「同じことを“くり返す”力を手に入れる」です。
昨日までは、「1回だけの処理」や「条件で分かれる処理」でした。
今日はそこに、

同じ処理を何回も自動でくり返す
「何回くり返すか」を変数でコントロールする
くり返しと条件分岐を組み合わせて“ちょっとしたロジック”にする

ここまでを狙います。
キーワードは forwhile です。


くり返しの基本イメージ

「人力でコピペ」から「コンピュータに任せる」へ

例えば、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 = 0
while 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になるか」を必ず確認する。

もし余裕があれば、今日の貯金シミュレーターを少しアレンジしてみてください。

例えば、

毎月の貯金額に「ボーナス月だけ多め」を入れてみる
目標に届かなかったら「あといくら足りないか」も表示する
「目標金額」「毎月の貯金額」「年数」を入力して、どれかを計算する

など、くり返しと条件を組み合わせる練習はいくらでも作れます。
「これ、人間が手でやるとダルいな」と思ったら、「ループで書けないか?」と一度考えてみてください。

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