プログラムの流れを制御するのが 条件分岐 と 繰り返し です。本記事では if / for / while と、よく使う組み込み関数 enumerate / zip / range を、株価データの集計を例に整理します。
目次
- if 文 — 条件で処理を分ける
- 三項演算子で短く書く
- for 文 — コレクションを順に処理する
- range — 連番を生成する
- enumerate — インデックスと値をセットで取る
- zip — 複数のコレクションを同時に処理する
- continue と break
- while 文 — 条件が満たされる間だけ繰り返す
- 前日比で「上がった日」を数える
if 文 — 条件で処理を分ける
if は条件に応じて処理を切り替える基本構文です。
price = 1500if price > 2000: print("高値圏です")elif price > 1000: print("中位の水準です")else: print("低位の水準です")ポイントは次の 2 つです。
- 条件式の末尾は
:(コロン)で終える - ブロック内はスペース 4 つでインデントする
複数条件は and / or / not で連結できます。
volume = 12_000_000if price > 1000 and volume > 10_000_000: print("高値・出来高ともに条件を満たす")三項演算子で短く書く
「条件によって値を選ぶだけ」のときは三項演算子が便利です。
price = 2900label = "高値" if price >= 2500 else "低位"print(label) # 高値ただし条件が 2 つ以上重なると読みづらくなります。複雑になったら通常の if に戻します。
for 文 — コレクションを順に処理する
for はリストや辞書などのコレクションを順に処理します。
prices = [2900, 2925, 2880, 2910, 2945]total = 0for price in prices: total += priceprint(total / len(prices)) # 2912.0辞書をループするときは .items() でキーと値を同時に取り出せます。
companies = {"7203": "トヨタ自動車", "9984": "ソフトバンクグループ"}for code, name in companies.items(): print(f"{code}: {name}")range — 連番を生成する
回数を指定したループには range を使います。
for i in range(5): print(i) # 0, 1, 2, 3, 4
for i in range(1, 6): print(i) # 1, 2, 3, 4, 5
for i in range(0, 10, 2): print(i) # 0, 2, 4, 6, 8引数は range(start, stop, step) の形で、stop は含まれないことに注意します。
enumerate — インデックスと値をセットで取る
「何番目の要素か」が必要なときは enumerate を使います。
prices = [2900, 2925, 2880, 2910, 2945]for i, price in enumerate(prices): print(f"{i} 日目: {price} 円")for i in range(len(prices)): のように書くより、意図がはっきりします。
zip — 複数のコレクションを同時に処理する
長さが同じ複数のコレクションをセットで回したいときは zip を使います。
dates = ["2026-04-01", "2026-04-02", "2026-04-03"]prices = [2900, 2925, 2880]volumes = [11_000_000, 9_500_000, 12_500_000]
for date, price, volume in zip(dates, prices, volumes): print(f"{date}: 終値 {price} 円 / 出来高 {volume:,}")長さが異なるときは、短いほうに合わせて停止します。
continue と break
ループの途中で挙動を変える 2 つのキーワードがあります。
continue: 残りをスキップして次の繰り返しへ進むbreak: ループそのものを抜ける
prices = [2900, 0, 2880, 2910, 0]for price in prices: if price == 0: continue # 欠損値はスキップ print(price)
for price in prices: if price == 0: break # 最初の欠損値で停止 print(price)while 文 — 条件が満たされる間だけ繰り返す
回数があらかじめ決まらないループには while を使います。
balance = 100_000day = 0while balance < 110_000: balance = int(balance * 1.001) # 仮の利回り day += 1print(f"{day} 日で 11 万円に到達")無限ループに陥らないよう、ループ内で終了条件を必ず変化させる ことがポイントです。
前日比で「上がった日」を数える
ここまでの内容を組み合わせる例です。
prices = [2900, 2925, 2880, 2910, 2945, 2960]up_days = 0for prev, curr in zip(prices[:-1], prices[1:]): if curr > prev: up_days += 1print(f"上昇日数: {up_days}") # 上昇日数: 4zip(prices[:-1], prices[1:]) で「前日と当日のペア」を作るのは、時系列処理で頻出する書き方です。
生成AI へのプロンプト例
ループ処理の書き方を生成AI に質問する例です。
Python で、銘柄ごとの終値リストが入った辞書を受け取り、銘柄ごとの「直近 5 日のうち、前日比で上昇した日数」を返す関数を書いてください。
入力: dict[str, list[float]] (キーは銘柄コード、値は古い順の終値)出力: dict[str, int]- 終値が 5 日に満たない銘柄は除外する- Python 3.12 / 標準ライブラリのみ入出力の型と例外条件を明示すると、ブレの少ないコードが返ります(#7-2「データ分析のためのプロンプト設計」)。
まとめ
ifはelif/elseと組み合わせて条件分岐を書くforはコレクションを順に処理し、whileは条件が満たされる間だけ繰り返すrange/enumerate/zipは for と組み合わせる定石continue/breakでループ内の挙動を細かく制御できる