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

Python Python
スポンサーリンク
スポンサーリンク

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 = 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をコピーしました