1. for ループの基本
for ループは「リストや範囲の要素を1つずつ取り出して処理する」構文です。
データを1件ずつ処理する場面は機械学習でも頻繁に登場します。
range(n) は 0 から n-1 までの整数列を生成します。
range(start, stop) や range(start, stop, step) と指定することもできます。
💡 range() の規則:
range(1, 6) は 1, 2, 3, 4, 5 を生成します(終端の 6 は含まれません)。
Pythonのインデックスは 0始まり なので注意してください。
💡 [...](リスト)について:
patient_ids = ["P001", "P002", "P003", "P004"] の [...] はリストです。
複数の値をまとめて管理できるデータ構造で、for ループと非常に相性がよいため、
ここでは「複数の値をまとめたもの」として理解しておいてください。
リストの詳しい作り方・追加・削除・スライスなどの操作は
レッスン6「リスト」でじっくり学びます。
ループ変数に慣習的に使われる名前:i(インデックス)、n(数値)、要素の意味を表す名前(pid、epoch)。
💡 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 のままだと無限ループになります。
必ずループ内で条件が変化するようにしてください。
💡 for vs while の使い分け:
- 繰り返し回数が決まっている →
for - 条件が満たされるまで繰り返す →
while
AIの学習では「100エポック繰り返す」なら for、「損失が十分小さくなるまで続ける」なら while が自然です。
🤖 AI用語メモ(今は概要だけ把握すればOK):
・エポック(epoch):AIが全学習データを1周する繰り返し単位
・損失(loss):AIの予測がどれだけ外れているかを示す数値(小さいほど良い)
どちらも詳しくはAI資格コースで学びます。ここでは「for と while の使い分け」の感覚だけ押さえましょう。
3. break と continue
break はループを即座に終了します。
continue は現在の繰り返しをスキップして次へ進みます。
データのフィルタリングや早期終了(early stopping)の実装で頻繁に使います。
💡 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つのリストを組み合わせて並行して処理できます。
ラベルと予測値を同時に扱う場面などで便利です。
💡 enumerate() のデフォルト開始値:
enumerate(items, start=1) と書くと 1 始まりにできます。
表示用の番号付けに便利です。
5. 練習問題
1〜10 の合計を計算する
for ループと range() を使って 1 から 10 までの整数をすべて足し合わせ、合計値を出力してください。
(期待する出力: 合計: 55)
ヒントを見る(答え+解説)
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 += i は total = total + i の省略形です。
FizzBuzz — 医療版
1 から 20 まで繰り返し、
3 の倍数なら "Fizz"(検査間隔)、
5 の倍数なら "Buzz"(服薬タイミング)、
両方の倍数(15 の倍数)なら "FizzBuzz"(重複イベント)、
それ以外は数字をそのまま出力してください。
ヒントを見る(答え+解説)
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」が出力されません。
異常値を除いた平均を計算する
下の体温データ(℃)から 37.5 以上の異常値を continue でスキップし、
正常値のみで平均体温を計算して出力してください。
ヒントを見る(答え+解説)
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 を置くことで、異常値を集計に含めないようにします。
while ループで目標心拍数に達するまでの回数を求める
安静時心拍数 hr = 60 bpm から始め、1回の運動ごとに 8 bpm 増加するとします。
while ループを使って、目標心拍数 130 bpm 以上になるまでに
何回の運動が必要かを求めて表示してください。
(期待する出力例: 9回の運動で目標心拍数 (130 bpm) に到達しました)
ヒントを見る(答え+解説)
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次元データ処理ができる
自由に試してみましょう:
完了するとトップページに進捗が表示されます