プログラミングにおいて反復構造は、同一の処理を複数回実行する際に不可欠な要素です。特にデータ処理や条件付きの繰り返しタスクではその威力を発揮します。Python言語では主に2種類の反復構文が用意されており、さらにループの進行方向を細かく調整するための制御命令も提供されています。ここではこれらの基本的な仕組みを実践的なコード例とともに解説します。
シーケンス走査に特化した for ループ
決まった回数あるいはイテラブルなオブジェクト(リスト、タプル、文字列など)の要素を一括で取り扱う場合に適しています。以下のスクリプトは、指定した範囲の数値を組み合わせて掛け算の結果を表示する処理を表します。
multipliers = range(2, 6)
for base_num in multipliers:
row_output = []
for factor in range(1, base_num + 1):
row_output.append(f"{base_num}×{factor}={base_num*factor}")
print(" | ".join(row_output))
外部ループが基準となる数値を順次取得し、内部ループはその数値より小さい範囲で演算子を作成しています。最終的にリストを結合して一度に表示することで、改行処理のロジックが簡素化されます。
状態依存型の while ループ
`for` と異なり、この構文は明示的な終了条件の評価結果に基づいてボディ内のコードを実行し続けます。特定の閾値に達するまで変数を加算していく典型的なパターンを見てみましょう。
current_value = 1
total_accumulation = 0
target_limit = 50
while current_value <= target_limit:
total_accumulation += current_value
current_value += 2
print(f"合計値: {total_accumulation}")
条件式が成立している間のみ処理が継続され、ループ内でカウンターと累積変数が更新される仕組みです。無限ループを防ぐために、必ず内部で停止条件を満たす変更が行われるよう設計する必要があります。
ループ制御のための break と continue
繰り返しの挙動を動的に変更するには、制御ステートメントが有効です。`break` は即座に現在のブロックから脱出させ、`continue` は残りの処理をスキップして次の迭代に進ませます。
# 条件到達時に早期終了するパターン
step = 1
running_total = 0
stop_threshold = 200
while step <= 100:
running_total += step
if running_total > stop_threshold:
break
step += 1
print(f"打ち切り時の合計: {running_total}")
# 特定条件の場合のみ処理を省略するパターン
index = 1
odd_sum = 0
limit_val = 20
while index <= limit_val:
if index % 2 == 0:
index += 1
continue
odd_sum += index
index += 1
print(f"奇数のみ加算した結果: {odd_sum}")
前者は期待値を超えた段階で計算を中断する最適化例であり、後者は偶数をフィルタリングせずに通過させる手法を示しています。
実践応用:入力検証と推測ゲーム
以上の概念を組み合わせて、ユーザーからの入力を受けて処理を繰り返すインタラクティブなスクリプトを作成できます。今回は範囲指定された乱数を当てるプログラムを再構築します。
import random
lower_bound = int(input("最小値を入力してください: "))
upper_bound = int(input("最大値を入力してください: "))
secret_number = random.randrange(lower_bound, upper_bound + 1)
attempt_count = 0
while True:
attempt_count += 1
try:
guess = int(input("予想値を入力: "))
except ValueError:
print("数値形式で入力してください")
continue
if guess < secret_number:
print("小さすぎます")
elif guess > secret_number:
print("大きすぎます")
else:
print(f"{attempt_count}回の試行で正解しました!")
break
外部キーボードからの入力をリアルタイムで評価し、不正な値が入力された場合はループを継続して再度促す仕様としています。正解判定が成立した瞬間に `break` が発動し、プログラムは正常に終了します。