[Pythonのはじめ方] Part6: 繰り返し処理(for, while)

Python

はじめに

プログラミングでは、同じ処理や似たような処理を何度も繰り返したい場面がたくさんあります。例えば、リストの各要素に対して同じ操作をしたり、特定の条件が満たされるまで処理を続けたりする場合です。

Pythonでは、このような繰り返し処理を行うために、主にforループwhileループという2つの構文が用意されています。

このステップでは、これらの基本的な使い方と、ループを制御するための便利な機能について学んでいきましょう!🚀

forループ: 決まった回数や要素を繰り返す

forループは、リスト、タプル、文字列などのイテラブルオブジェクト(要素を一つずつ取り出せるオブジェクト)の要素を順番に取り出して処理する場合や、決まった回数だけ処理を繰り返したい場合によく使われます。

基本的な使い方 (range関数)

指定した回数だけ処理を繰り返したい場合は、range()関数を使うのが一般的です。

# 0から4までの数字を順番に出力 (計5回)
for i in range(5):
    print(f"現在の数字: {i}")

# 実行結果:
# 現在の数字: 0
# 現在の数字: 1
# 現在の数字: 2
# 現在の数字: 3
# 現在の数字: 4

range(5)は、0から始まり5未満の整数のシーケンス(0, 1, 2, 3, 4)を生成します。forループは、このシーケンスから順番に値を取り出して変数iに代入し、ブロック内の処理を実行します。

range()関数は、開始値やステップ(増分)を指定することもできます。

# 2から6までの数字を出力 (開始値2, 終了値7-1)
for i in range(2, 7):
    print(f"範囲指定: {i}")

# 1から10までの奇数を出力 (開始値1, 終了値10-1, ステップ2)
for i in range(1, 10, 2):
    print(f"奇数: {i}")

# 実行結果 (範囲指定):
# 範囲指定: 2
# 範囲指定: 3
# 範囲指定: 4
# 範囲指定: 5
# 範囲指定: 6

# 実行結果 (奇数):
# 奇数: 1
# 奇数: 3
# 奇数: 5
# 奇数: 7
# 奇数: 9

リストやタプルの要素を繰り返す

リストやタプルの各要素に対して処理を行いたい場合にもforループが便利です。

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(f"好きな果物: {fruit}")

# 実行結果:
# 好きな果物: apple
# 好きな果物: banana
# 好きな果物: cherry

この例では、fruitsリストから要素が一つずつ取り出され、変数fruitに代入されてprint()関数で出力されます。

enumerate関数: インデックス付きで繰り返す

ループ処理中に、要素の値だけでなく、その要素が何番目にあるか(インデックス)も同時に知りたい場合があります。そのようなときはenumerate()関数を使います。

fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
    print(f"インデックス{index}: {fruit}")

# 実行結果:
# インデックス0: apple
# インデックス1: banana
# インデックス2: cherry

zip関数: 複数のリストを同時に繰り返す

複数のリストの要素を同時に取り出して処理したい場合はzip()関数を使います。

names = ["Alice", "Bob", "Charlie"]
ages = [30, 25, 35]

for name, age in zip(names, ages):
    print(f"{name}さんは{age}歳です。")

# 実行結果:
# Aliceさんは30歳です。
# Bobさんは25歳です。
# Charlieさんは35歳です。

zip()関数は、渡された複数のイテラブルから、対応する位置の要素をまとめたタプルを生成します。リストの長さが異なる場合、短い方のリストの長さに合わせて処理されます。

whileループ: 条件が満たされている間繰り返す

whileループは、指定した条件式が真(True)である間、ブロック内の処理を繰り返し実行します。繰り返しの回数が事前に決まっていない場合や、特定の状態になるまで処理を続けたい場合に有効です。

基本的な使い方

count = 0
while count < 3:
    print(f"カウント: {count}")
    count += 1 # countを1増やす (これを忘れると無限ループになる!)

print("ループ終了")

# 実行結果:
# カウント: 0
# カウント: 1
# カウント: 2
# ループ終了

この例では、変数countが3未満である間、print()文とcountを1増やす処理が繰り返されます。countが3になると条件式count < 3が偽(False)になり、ループが終了します。

注意!無限ループ
whileループでは、ループ内で条件式がいつかFalseになるように状態を変化させないと、無限ループに陥ってプログラムが終了しなくなってしまいます。条件式の変数を更新し忘れないように注意しましょう。もし無限ループになってしまった場合は、実行環境に応じてプログラムを強制終了させる必要があります(多くの環境ではCtrl+Cで中断できます)。

forループとwhileループの使い分け 🤔

forループとwhileループはどちらも繰り返し処理を行いますが、得意な場面が異なります。

ループの種類主な用途特徴
forリストやタプルなどの要素を順番に処理する、決まった回数繰り返す繰り返しの対象(イテラブル)や回数(range)が明確な場合に使いやすい
while特定の条件が満たされている間、処理を繰り返す繰り返しの回数が事前に分からない場合や、特定の状態変化を待つ場合に適している

基本的には、繰り返しの回数が決まっている場合や、リストなどの要素をすべて処理したい場合はforループを、特定の条件を満たすまで繰り返したい場合はwhileループを選ぶと良いでしょう。

ループの制御: breakとcontinue

ループの実行中に、処理の流れを制御したい場合があります。そのためにbreak文とcontinue文が用意されています。

break文: ループを強制終了する

break文は、ループ処理を途中で完全に終了させたいときに使います。breakが実行されると、そのループから即座に抜け出し、ループの次の処理に進みます。

for i in range(10):
    print(i)
    if i == 3:
        print("3を見つけたのでループを終了します。")
        break # ループを抜ける

# 実行結果:
# 0
# 1
# 2
# 3
# 3を見つけたのでループを終了します。

whileループでも同様に使えます。

count = 0
while True: # 無限ループのように見えるが...
    print(f"現在のカウント: {count}")
    if count >= 5:
        print("カウントが5以上になったので終了します。")
        break # 条件を満たしたらループを抜ける
    count += 1

# 実行結果:
# 現在のカウント: 0
# 現在のカウント: 1
# 現在のカウント: 2
# 現在のカウント: 3
# 現在のカウント: 4
# 現在のカウント: 5
# カウントが5以上になったので終了します。

continue文: 現在の回の処理をスキップする

continue文は、ループ中の残りの処理をスキップし、次の繰り返し(イテレーション)に進みたいときに使います。ループ自体は終了しません。

for i in range(5):
    if i == 2:
        print("iが2の場合はスキップします。")
        continue # iが2のときの残りの処理を飛ばして次のループへ
    print(f"現在の数字: {i}")

# 実行結果:
# 現在の数字: 0
# 現在の数字: 1
# iが2の場合はスキップします。
# 現在の数字: 3
# 現在の数字: 4

この例では、iが2のとき、continue文が実行され、その後のprint(f"現在の数字: {i}")は実行されずに、次のi=3のループに進みます。

ループのelse節: ループが正常終了した時に実行

Pythonのforループとwhileループには、少し変わった機能としてelse節を付けることができます。このelse節は、ループがbreak文で中断されずに、最後まで正常に実行された場合にのみ実行されます。

forループのelse節

for i in range(5):
    print(f"forループ: {i}")
    # if i == 10: # この条件が満たされることはない
    #     print("breakします")
    #     break
else:
    print("forループが正常に終了しました。")

# 実行結果:
# forループ: 0
# forループ: 1
# forループ: 2
# forループ: 3
# forループ: 4
# forループが正常に終了しました。

もし上記のコードでif i == 3: break のような処理があり、ループが途中で中断された場合、else節は実行されません。

whileループのelse節

count = 0
while count < 3:
    print(f"whileループ: {count}")
    count += 1
    # if count == 2:
    #    print("breakします")
    #    break
else:
    print("whileループが正常に終了しました。")

# 実行結果:
# whileループ: 0
# whileループ: 1
# whileループ: 2
# whileループが正常に終了しました。

else節は、ループで何かを検索していて、最後まで見つからなかった場合に特定の処理を行う、といった用途で使われることがあります。

まとめ

今回は、Pythonの繰り返し処理の基本であるforループとwhileループ、そしてそれらを制御するbreak文、continue文、else節について学びました。

  • forループ: イテラブルオブジェクトの要素や、range()で指定した回数だけ繰り返す。
  • whileループ: 条件式がTrueの間、繰り返す。無限ループに注意!
  • break: ループを途中で強制終了する。
  • continue: 現在の回の処理をスキップし、次の回に進む。
  • else節: ループがbreakされずに正常終了した場合に実行される。

繰り返し処理はプログラミングの非常に基本的な要素であり、様々な場面で活用されます。使い方をしっかりマスターして、効率的なコードを書けるようになりましょう!💪

次はStep 2に進み、リスト、タプル、辞書といった複数のデータをまとめて扱うための「コレクション」と、処理をまとめる「関数」について学びます!

参考情報

コメント

タイトルとURLをコピーしました