Python 入門

Python 繰り返し構文(ループ)

繰り返し処理(ループ)は、定型作業を自動化し、特定のコードブロックを複数回実行することを可能にします。

大量のデータセットに対する反復処理、計算の繰り返し、あるいは動的でインタラクティブなプログラムの作成において、ループは不可欠なツールです。forwhile をいかに効率的に使いこなすかが、シンプルでパフォーマンスの高い Python コードを書くための鍵となります。

1. for 文を理解する

for は、シーケンス(リスト、タプル、文字列、range など)の各要素を順番に取り出し、その要素数分だけコードブロックを実行するために使用されます。

for 文の基本構文は以下の通りです。

for 変数 in シーケンス:
    # 各要素に対して実行するコード
  • 変数 (Variable): ループの各イテレーション(反復)において、シーケンス内の現在の要素の値が代入される変数です。
  • シーケンス (Sequence): 反復処理の対象となるデータの集合です。リスト、タプル、文字列、range オブジェクト、またはその他のイテラブル(反復可能)なオブジェクトが該当します。
  • 実行コード: シーケンスの要素ごとに実行されるコードブロックです。ループの一部として認識されるためには、必ずインデント(字下げ)が必要です。

1.1 リストの反復処理

for 文の最も一般的な用途の一つは、リスト内の要素を順に処理することです。

# 例:フルーツのリストをループで処理する
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

この例では、for 文が fruits リストを走査します。各イテレーションにおいて、変数 fruit にリストの現在の要素が格納され、print(fruit) によって出力されます。

1.2 文字列の反復処理

文字列(String)も文字のシーケンスであるため、for 文を使って一文字ずつ取り出すことができます。

# 例:文字列を一文字ずつ処理する
message = "Hello"
for char in message:
    print(char)

この場合、変数 char には文字列内の各文字が順次代入され、出力されます。

1.3 range() 関数の活用

range() 関数 は for 文と組み合わせて使われることが多く、連続した数字のシーケンスを生成します。引数の数によって挙動が変わります。

  • range(stop): 0から始まり、stop の直前まで(stop 自体は含まない)の数値を生成します。
  • range(start, stop)start から始まり、stop の直前までの数値を生成します。
  • range(start, stop, step)start から stop の直前まで、step 刻みで数値を生成します。
# 例:range() を使って 0 から 4 まで出力
for i in range(5):
    print(i)

# 例:range() を使って 2 から 5 まで出力
for i in range(2, 6):
    print(i)

# 例:range() を使って 0 から 10 までの偶数を出力
for i in range(0, 11, 2):
    print(i)

1.4 ネスト(入れ子)された for 文

ある for 文の中に別の for 文を記述することを「ネスト(ネスト構造)」と呼びます。これは、行列やテーブルのような二次元データ構造を処理する際に非常に有効です。

# 例:ネストされた for 文で座標を出力
for i in range(3):
    for j in range(2):
        print(f"({i}, {j})")

この例では、外側のループが実行されるたびに、内側のループが指定回数分(この場合は2回)完全に実行されます。結果として、(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1) という座標が順に出力されます。

2. while 文を理解する

while 文 は、特定の条件が True(真) である間、コードブロックを繰り返し実行します。基本構文は以下の通りです。

while 条件式:
    # 条件が真である限り実行されるコード
  • 条件式 (Condition): 各イテレーションの開始前に評価されるブール式です。この条件が True であればブロックが実行され、False になるとループは終了します。
  • 実行コード: 条件が成立している間に実行されるコードです。ここでも適切なインデントが必須です。

2.1 基礎的な while 文の例

# 例:while 文を使って 1 から 5 まで出力
count = 1
while count <= 5:
    print(count)
    count += 1

この例では、count が 5 以下である限りループが継続します。ループ内で count += 1 (インクリメント)を行うことで、最終的に条件が False となり、ループが正常に終了するように制御しています。

2.2 ユーザー入力と while 文の組み合わせ

while 文は、ユーザーが特定の有効な値を入力するまで処理を繰り返すような、インタラクティブな処理によく使われます。

# 例:"quit" と入力されるまで入力を促し続ける
user_input = ""
while user_input != "quit":
    user_input = input("コマンドを入力してください('quit' で終了):")
    print(f"入力された内容: {user_input}")

この例では、ユーザーが明示的に "quit" と入力しない限り、無限に入力プロンプトが表示され続けます。

2.3 無限ループの注意点

while 文の条件が常に True であり続けると、プログラムが終了しなくなる「無限ループ(死ループ)」に陥ります。開発時は必ず条件がいつか False になるようなロジックを含める必要があります。

# 例:無限ループ(これを実行してはいけません!)
# x = 1
# while x > 0:
#     print("永遠に出力され続けます!")

もし無限ループを強制停止させる必要がある場合は、ターミナル上で Ctrl+C を入力してプログラムを中断させてください。

3. for 文と while 文の使い分け

実際の開発において、どちらのループを選択すべきかの基準は以下の通りです。

  • for 文を使用する場合: 反復回数が事前にわかっているとき(リストの全要素の走査や、固定範囲の数値処理など)。
  • while 文を使用する場合: 特定の条件が満たされるまで繰り返したいが、何回繰り返すかが事前には不明なとき(ユーザー入力待ち、センサーデータの監視など)。
特性for 文while 文
反復の仕組みシーケンス(リスト、文字列等)を走査条件式が False になるまで継続
反復回数事前にわかっている事前に不明な場合がある
主なユースケースコレクションの処理、データセットの反復特定条件の達成まで、状態の監視