Boucle for-else en Python
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
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 :
- Premier exemple : après avoir parcouru toute la liste (sans exécuter break), else est exécuté.
- 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
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
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
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
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 pas
elseetifconfondre for-else avec if-else. - Cette syntaxe est propre à Python ; les autres langages ne l'ont pas.
Instructions de boucle Python3
Autres extensions