プログラムの流れを制御するのが 条件分岐繰り返し です。本記事では if / for / while と、よく使う組み込み関数 enumerate / zip / range を、株価データの集計を例に整理します。

目次

  1. if 文 — 条件で処理を分ける
  2. 三項演算子で短く書く
  3. for 文 — コレクションを順に処理する
  4. range — 連番を生成する
  5. enumerate — インデックスと値をセットで取る
  6. zip — 複数のコレクションを同時に処理する
  7. continue と break
  8. while 文 — 条件が満たされる間だけ繰り返す
  9. 前日比で「上がった日」を数える

if 文 — 条件で処理を分ける

if は条件に応じて処理を切り替える基本構文です。

price = 1500
if price > 2000:
print("高値圏です")
elif price > 1000:
print("中位の水準です")
else:
print("低位の水準です")

ポイントは次の 2 つです。

  • 条件式の末尾は :(コロン)で終える
  • ブロック内はスペース 4 つでインデントする

複数条件は and / or / not で連結できます。

volume = 12_000_000
if price > 1000 and volume > 10_000_000:
print("高値・出来高ともに条件を満たす")

三項演算子で短く書く

「条件によって値を選ぶだけ」のときは三項演算子が便利です。

price = 2900
label = "高値" if price >= 2500 else "低位"
print(label) # 高値

ただし条件が 2 つ以上重なると読みづらくなります。複雑になったら通常の if に戻します。

for 文 — コレクションを順に処理する

for はリストや辞書などのコレクションを順に処理します。

prices = [2900, 2925, 2880, 2910, 2945]
total = 0
for price in prices:
total += price
print(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_000
day = 0
while balance < 110_000:
balance = int(balance * 1.001) # 仮の利回り
day += 1
print(f"{day} 日で 11 万円に到達")

無限ループに陥らないよう、ループ内で終了条件を必ず変化させる ことがポイントです。

前日比で「上がった日」を数える

ここまでの内容を組み合わせる例です。

prices = [2900, 2925, 2880, 2910, 2945, 2960]
up_days = 0
for prev, curr in zip(prices[:-1], prices[1:]):
if curr > prev:
up_days += 1
print(f"上昇日数: {up_days}") # 上昇日数: 4

zip(prices[:-1], prices[1:]) で「前日と当日のペア」を作るのは、時系列処理で頻出する書き方です。

生成AI へのプロンプト例

ループ処理の書き方を生成AI に質問する例です。

Python で、銘柄ごとの終値リストが入った辞書を受け取り、
銘柄ごとの「直近 5 日のうち、前日比で上昇した日数」を返す
関数を書いてください。
入力: dict[str, list[float]] (キーは銘柄コード、値は古い順の終値)
出力: dict[str, int]
- 終値が 5 日に満たない銘柄は除外する
- Python 3.12 / 標準ライブラリのみ

入出力の型と例外条件を明示すると、ブレの少ないコードが返ります(#7-2「データ分析のためのプロンプト設計」)。

まとめ

  • ifelif / else と組み合わせて条件分岐を書く
  • for はコレクションを順に処理し、while は条件が満たされる間だけ繰り返す
  • range / enumerate / zip は for と組み合わせる定石
  • continue / break でループ内の挙動を細かく制御できる