Python環境を起動中... 初回のみ数秒かかります
Lesson 5 / 20

ループ

このレッスンで学ぶこと

  • for ループと range() で繰り返し処理を書ける
  • while ループで条件が満たされる間、処理を繰り返せる
  • break/continue でループの流れを制御できる
  • enumerate() でインデックス付きの繰り返しができる

1. for ループの基本

for ループは「リストや範囲の要素を1つずつ取り出して処理する」構文です。 データを1件ずつ処理する場面は機械学習でも頻繁に登場します。

range(n) は 0 から n-1 までの整数列を生成します。 range(start, stop)range(start, stop, step) と指定することもできます。

sample_1.py
Ctrl+Enter
出力

💡 range() の規則: range(1, 6) は 1, 2, 3, 4, 5 を生成します(終端の 6 は含まれません)。 Pythonのインデックスは 0始まり なので注意してください。

💡 [...](リスト)について:
patient_ids = ["P001", "P002", "P003", "P004"][...]リストです。 複数の値をまとめて管理できるデータ構造で、for ループと非常に相性がよいため、 ここでは「複数の値をまとめたもの」として理解しておいてください。
リストの詳しい作り方・追加・削除・スライスなどの操作は レッスン6「リスト」でじっくり学びます。

ループ変数に慣習的に使われる名前:i(インデックス)、n(数値)、要素の意味を表す名前(pidepoch)。

sample_2.py
Ctrl+Enter
出力

💡 print() の end 引数: print(value, end=" ") は末尾の改行を空白に置き換えます。 行列の横並び表示などで使います。

💡 f-string の書式指定(:.1f など):
f"SpO2 平均値: {average:.1f}%":.1f は 「小数点以下1桁の float として表示する」という書式指定です。 f は float(小数)、.1 は小数点以下の桁数を表します。

pi = 3.14159
print(f"{pi:.1f}")   # → 3.1(小数点1桁)
print(f"{pi:.3f}")   # → 3.142(小数点3桁)
print(f"{pi:.0f}")   # → 3(整数として表示)

書式指定の詳しい使い方は レッスン9「文字列の応用」で学びます。

2. while ループ

while は「条件が True の間、処理を繰り返す」構文です。 繰り返し回数が事前にわからない場合(例:損失が閾値以下になるまで学習を続ける)に適しています。

注意: 条件が永遠に True のままだと無限ループになります。 必ずループ内で条件が変化するようにしてください。

sample_3.py
Ctrl+Enter
出力

💡 for vs while の使い分け:

  • 繰り返し回数が決まっている → for
  • 条件が満たされるまで繰り返す → while

AIの学習では「100エポック繰り返す」なら for、「損失が十分小さくなるまで続ける」なら while が自然です。

🤖 AI用語メモ(今は概要だけ把握すればOK):
エポック(epoch):AIが全学習データを1周する繰り返し単位
損失(loss):AIの予測がどれだけ外れているかを示す数値(小さいほど良い)
どちらも詳しくはAI資格コースで学びます。ここでは「forwhile の使い分け」の感覚だけ押さえましょう。

3. break と continue

break はループを即座に終了します。 continue は現在の繰り返しをスキップして次へ進みます。 データのフィルタリングや早期終了(early stopping)の実装で頻繁に使います。

sample_4.py
Ctrl+Enter
出力

💡 Early Stopping との対応: AIの学習では検証損失が改善しなくなったら学習を打ち切る「早期終了(early stopping)」という手法があります。 これは while + break で実装できる典型パターンです。

💡 enumerate() について:
for i, wbc in enumerate(wbc_series):enumerate() は、 ループ変数と一緒に「何番目か」を示すインデックスを取得できる関数です。 ここでは「i に番号が入る」とだけ覚えておいてください。
詳しい使い方はすぐ次の 「4. enumerate() と zip()」で学びます。

4. enumerate() と zip()

enumerate(iterable) はループ変数と同時にインデックスも取得できます。 「何番目の要素か」が必要な場面で、手動でカウンタ変数を管理する必要がなくなります。

zip(a, b) は2つのリストを組み合わせて並行して処理できます。 ラベルと予測値を同時に扱う場面などで便利です。

sample_5.py
Ctrl+Enter
出力

💡 enumerate() のデフォルト開始値: enumerate(items, start=1) と書くと 1 始まりにできます。 表示用の番号付けに便利です。

5. 練習問題

問題 1

1〜10 の合計を計算する

for ループと range() を使って 1 から 10 までの整数をすべて足し合わせ、合計値を出力してください。 (期待する出力: 合計: 55

exercise_1.py
出力
ヒントを見る(答え+解説)
total = 0
for i in range(1, 11):   # 1〜10(11は含まれない)
    total += i
print("合計:", total)    # 合計: 55

range(1, 11) は 1, 2, 3, ..., 10 を生成します(終端の 11 は含まれません)。total += itotal = total + i の省略形です。

問題 2

FizzBuzz — 医療版

1 から 20 まで繰り返し、 3 の倍数なら "Fizz"(検査間隔)、 5 の倍数なら "Buzz"(服薬タイミング)、 両方の倍数(15 の倍数)なら "FizzBuzz"(重複イベント)、 それ以外は数字をそのまま出力してください。

exercise_2.py
出力
ヒントを見る(答え+解説)
for n in range(1, 21):
    if n % 15 == 0:
        print("FizzBuzz")
    elif n % 3 == 0:
        print("Fizz")
    elif n % 5 == 0:
        print("Buzz")
    else:
        print(n)

15の倍数条件(3かつ5)を最初に判定することが重要です。elif n % 3 == 0 を先に書くと、15は3の倍数でもあるためそちらに引っかかり「FizzBuzz」が出力されません。

問題 3

異常値を除いた平均を計算する

下の体温データ(℃)から 37.5 以上の異常値を continue でスキップし、 正常値のみで平均体温を計算して出力してください。

exercise_3.py
出力
ヒントを見る(答え+解説)
temperatures = [36.5, 36.8, 38.1, 36.2, 39.0, 36.9, 37.1]
total = 0
count = 0
for temp in temperatures:
    if temp >= 37.5:
        continue          # 37.5以上はスキップ
    total += temp
    count += 1
print(f"正常体温の平均: {total/count:.2f} ℃({count} 件)")
# → 正常体温の平均: 36.68 ℃(5 件)

continue はそれ以降の処理をスキップして次のループに進みます。total += temp の前に continue を置くことで、異常値を集計に含めないようにします。

問題 4

while ループで目標心拍数に達するまでの回数を求める

安静時心拍数 hr = 60 bpm から始め、1回の運動ごとに 8 bpm 増加するとします。 while ループを使って、目標心拍数 130 bpm 以上になるまでに 何回の運動が必要かを求めて表示してください。
(期待する出力例: 9回の運動で目標心拍数 (130 bpm) に到達しました

exercise_4.py
出力
ヒントを見る(答え+解説)
hr = 60
target = 130
count = 0
while hr < target:
    hr += 8
    count += 1
print(f"{count}回の運動で目標心拍数 ({target} bpm) に到達しました")
# → 9回の運動で目標心拍数 (130 bpm) に到達しました

while は条件が True の間ループします。hr += 8 でループのたびに心拍数が変化し、hr >= 130 になった時点でループを抜けます。変化しない変数があると無限ループになるので注意。

まとめ

このレッスンのポイント

  • for i in range(start, stop, step) で指定回数の繰り返しができる
  • while 条件: は条件が True の間ループし続ける
  • break でループを即座に終了、continue で次のステップへスキップ
  • enumerate() でインデックスと要素を同時に取得できる
  • zip(a, b) で2つのリストを並行してループできる
  • ネストしたループで行列操作や2次元データ処理ができる

自由に試してみましょう:

free_practice.py
Ctrl+Enter
出力

完了するとトップページに進捗が表示されます