Boucle for-else en Python

Python3 循环语句Instructions de boucle Python3


En Python,forune boucle peut avoir uneelseclause else, qui est une syntaxe spécifique à Python, contrairement à la plupart des autres langages de programmation.

for-elseStructure : lorsque la boucle se termine normalement (c'est-à-dire qu'elle n'est pasbreakinterrompue par break), exécutezelsele code dans la clause else.

Signification du mot: elseelse signifie « autre » ; ici, cela signifie « traitement après la fin normale de la boucle ».


Syntaxe de base et paramètres

Format de syntaxe

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

Logique d'exécution

  • Fin normale: après que la boucle a parcouru tous les éléments, la clause else est exécutée.
  • Interrompu par break: si la boucle est interrompue par break, la clause else n'est pas exécutée.
  • Arrêt anormal: si une exception se produit dans la boucle, else n'est pas exécuté non plus.

Exemples

Exemple 1 : Utilisation de base - Exécuter lorsque la recherche échoue

Exemple

# Trouver les nombres pairs dans la liste, print si trouvé, exécuter else si aucun n'est trouvé
numbers = [1, 3, 5, 7, 9]

for num in numbers:
    if num % 2 == 0:
        print(f"Nombre pair trouvé : {num}")
        break
else:
    print("Aucun nombre pair trouvé")

print("---")

# Cas où la liste contient un nombre pair
numbers = [1, 3, 6, 7, 9]
for num in numbers:
    if num % 2 == 0:
        print(f"Nombre pair trouvé : {num}")
        break
else:
    print("Aucun nombre pair trouvé")

Sortie attendue :

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

Explication du code :

  1. Premier exemple : après avoir parcouru toute la liste (sans exécuter break), else est exécuté.
  2. Deuxième exemple : après avoir trouvé un nombre pair, break est exécuté, ce qui saute else.

Exemple 2 : application courante - recherche de nombres premiers

Exemple

# Déterminer si un nombre est premier
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} n'est pas un nombre premier, il est divisible par {i}")
            return False
    else:
        # La boucle se termine normalement, ce qui signifie qu'aucun facteur n'a été trouvé
        print(f"{n} est un nombre premier")
        return True

# Test
is_prime(7)   # Sortie : 7 est un nombre premier
is_prime(10)  # Sortie : 10 n'est pas un nombre premier, il est divisible par 2

Sortie attendue :

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

C'est l'un des usages les plus classiques de for-else : une fois le parcours de recherche terminé, si la cible n'est pas trouvée, exécuter else.

Exemple 3 : Comparaison avec break

Exemple

# Scénario : parcourir une liste pour trouver un élément spécifique
fruits = ["pomme", "banane", "orange", "grape"]

# Utilisation de for-else
print("=== Utilisation de for-else ===")
for fruit in fruits:
    if fruit == "orange":
        print(f"Trouvé : {fruit}")
        break
    print(f"Vérification : {fruit}")
else:
    print("Cible non trouvée")

print("\n"=== Sans utiliser break ===")
# Une autre façon (sans utiliser else)
found = False
for fruit in fruits:
    if fruit == "orange":
        print(f"Trouvé : {fruit}")
        found = True
        break
    print(f"Vérification : {fruit}")

if not found:
    print("Cible non trouvée")

Sortie attendue :

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

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

La syntaxe for-else est plus concise et ne nécessite pas de variable drapeau supplémentaire.

Exemple 4 : Gestion de la fin de boucle

Exemple

# Scénario : vérifier si tous les éléments satisfont la condition
scores = [85, 90, 78, 92, 88]

# Vérifier s'il y a des notes en échec
print("=== Vérifier s'il y a des notes en échec ===")
for score in scores:
    if score < 60:
        print(f"Note en échec trouvée : {score}")
        break
    print(f"{score} points, réussi")
else:
    print("Toutes les notes sont validées")

# Autre scénario : effectuer le nettoyage une fois tout le traitement terminé
print("\n"=== Nettoyage une fois le traitement terminé ===")
files = ["a.txt", "b.txt", "c.txt"]

for file in files:
    print(f"Traitement du fichier : {file}")
else:
    print("Tous les fichiers ont été traités, exécution du nettoyage")
    print("--- Nettoyage terminé ---")

Sortie attendue :

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

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

for-else peut également être utilisé dans des scénarios où vous "effectuez le nettoyage après la fin".

Exemple 5 : Application pratique - Vérification de connexion

Exemple

# Simuler des tentatives de connexion
def try_login(username, password):
    valid_users = {
        "admin": "123456",
        "user": "password",
        "guest": "guest"
    }

    print(f"Tentative de connexion : {username}")

    for user, pwd in valid_users.items():
        if user == username and pwd == password:
            print("Connexion réussie !")
            return True

    else:
        # Après avoir parcouru tous les utilisateurs, aucune correspondance n'a été trouvée
        print("Nom d'utilisateur ou mot de passe incorrect")
        return False

# Test
try_login("admin", "123456")  # Sortie : Connexion réussie
print("---")
try_login("admin", "wrong")    # Sortie : Nom d'utilisateur ou mot de passe incorrect

Sortie attendue :

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

for-else est très utile dans les scénarios de parcours et de recherche, exprimant clairement la logique "non trouvé".

Notes

  • elseelse n'est pasifpartie de if, mais plutôtforpartie de for.
  • Ne paselseetifconfondre for-else avec if-else.
  • Cette syntaxe est propre à Python ; les autres langages ne l'ont pas.

Python3 循环语句Instructions de boucle Python3


Autres extensions