Python for-else ループ

Python3 循环语句Python3 ループ文


Python では、forループには、elseelse 句を付けることができます。これは Python 特有の文法であり、他のほとんどのプログラミング言語とは異なります。

for-else構造の説明:ループが正常に完了した場合(つまり、breakbreak で中断されなかった場合)には、elseelse 内のコードが実行されます。

単語の意味: else「その他」という意味で、ここでは「ループが正常に終了した後の処理」を表します。


基本構文とパラメータ

構文形式

for 变量 in 可迭代对象:
    循环体
else:
    循环正常结束时的处理

実行ロジック

  • 正常完了:ループがすべての要素を走査し終えた後、else 句を実行します。
  • break で終了:ループが break で中断された場合は、else 句は実行されません。
  • 異常終了:ループ内で例外が発生した場合、else も実行されません。

例

例1:基本的な使い方 - 検索失敗時に実行

例

# リスト内の偶数を探し、見つかれば出力し、見つからなければ else を実行
numbers = [1, 3, 5, 7, 9]

for num in numbers:
    if num % 2 == 0:
        print(f"偶数を見つけました: {num}")
        break
else:
    print("偶数が見つかりませんでした")

print("---")

# リストに偶数が含まれる場合
numbers = [1, 3, 6, 7, 9]
for num in numbers:
    if num % 2 == 0:
        print(f"偶数を見つけました: {num}")
        break
else:
    print("偶数が見つかりませんでした")

期待される実行結果:

未找到偶数
---
找到偶数: 6

コードの解説:

  1. 最初の例:リスト全体を走査し終えたため(break を実行していない)、else を実行します。
  2. 2つ目の例:偶数を見つけた後に break を実行するため、else をスキップします。

例2:よくある応用 - 素数を探す

例

# ある数が素数かどうかを判定する
def is_prime(n):
    if n <= 1:
        return False

    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            print(f"{n} は素数ではなく、{i} で割り切れます")
            return False
    else:
        # ループが正常に終了した場合、因数が見つからなかったことを意味する
        print(f"{n} は素数です")
        return True

# テスト
is_prime(7)   # 出力: 7 は素数
is_prime(10)  # 出力: 10 は素数ではなく、2 で割り切れます

期待される実行結果:

7 是质数
10 不是质数,能被 2 整除

これは for-else の最も古典的な使い方の1つです。検索の走査が完了した後、対象が見つからなければ else を実行します。

例3:break との比較

例

# シナリオ:リストを走査して特定の要素を探す
fruits = ["apple", "banana", "orange", "grape"]

# for-else を使用
print("=== for-else を使用 ===")
for fruit in fruits:
    if fruit == "orange":
        print(f"見つかりました: {fruit}")
        break
    print(f"確認: {fruit}")
else:
    print("対象が見つかりません")

print("\n=== break を使用しない ===)
# もう1つの書き方(else を使用しない)
found = False
for fruit in fruits:
    if fruit == "orange":
        print(f"見つかりました: {fruit}")
        found = True
        break
    print(f"確認: {fruit}")

if not found:
    print("対象が見つかりません")

期待される実行結果:

=== 使用 for-else ===
检查: apple
检查: banana
找到: orange

=== 不使用 else ===
检查: apple
检查: banana
找到: orange

for-else 構文はより簡潔で、追加のフラグ変数が不要です。

例4:ループ終了の処理

例

# シナリオ:すべての要素が条件を満たすかどうかを検証する
scores = [85, 90, 78, 92, 88]

# 不合格があるか確認する
print("=== 不合格があるか確認 ===")
for score in scores:
    if score < 60:
        print(f"不合格を発見: {score}")
        break
    print(f"{score} 点、合格")
else:
    print("すべての成績が合格です")

# もう1つのシナリオ:すべての処理を完了した後にクリーンアップを実行する
print("\n=== 処理完了後のクリーンアップ ===)
files = ["a.txt", "b.txt", "c.txt"]

for file in files:
    print(f"ファイルを処理中: {file}")
else:
    print(すべてのファイルの処理が完了しました。クリーンアップを実行します)
    print("--- クリーンアップ完了 ---")

期待される実行結果:

=== 检查是否有不及格 ===
85 分,合格
90 分,合格
78 分,合格
92 分,合格
88 分,合格
所有成绩都及格

=== 处理完成后清理 ===
处理文件: a.txt
处理文件: b.txt
处理文件: c.txt
所有文件处理完成,执行清理工作
--- 清理完成 ---

for-else は「完了後にクリーンアップを実行する」シナリオにも使用できます。

例5:実践的な応用 - ログイン検証

例

# ログイン試行をシミュレートする
def try_login(username, password):
    valid_users = {
        "admin": "123456",
        "user": "password",
        "guest": "guest"
    }

    print(f"ログイン試行: {username}")

    for user, pwd in valid_users.items():
        if user == username and pwd == password:
            print("ログイン成功!")
            return True

    else:
        # すべてのユーザーを走査しても一致しなかった場合
        print("ユーザー名またはパスワードが間違っています")
        return False

# テスト
try_login("admin", "123456")  # 出力: ログイン成功
print("---")
try_login("admin", "wrong")    # 出力: ユーザー名またはパスワードが間違っています

期待される実行結果:

尝试登录: admin
登录成功!
---
尝试登录: admin
用户名或密码错误

for-else は走査・検索のシナリオで非常に役立ち、「見つからなかった」というロジックを明確に表現できます。

注意事項

  • elseではなくifの一部であり、むしろforの一部です。
  • を混同して使用elseとifしないでください。
  • この構文は Python 特有であり、他の言語にはありません。

Python3 循环语句Python3 ループ文


その他の拡張