Python for-else-Schleife
In Python,forEine Schleife kann eineelseelse-Klausel haben, die eine Python-spezifische Syntax ist, anders als in den meisten anderen Programmiersprachen.
for-elseStruktur: Wenn die Schleife normal abgeschlossen wird (d. h., nichtbreakdurch break unterbrochen wird), führeelseden Code in der else-Klausel aus.
Wortbedeutung: elseelse bedeutet "sonst"; hier bedeutet es "Verarbeitung, nachdem die Schleife normal endet".
Grundlegende Syntax und Parameter
Syntaxformat
for 变量 in 可迭代对象:
循环体
else:
循环正常结束时的处理
Ausführungslogik
- Normaler Abschluss: Nachdem die Schleife alle Elemente durchlaufen hat, wird die else-Klausel ausgeführt.
- Durch break beendet: Wenn die Schleife durch break unterbrochen wird, wird die else-Klausel nicht ausgeführt.
- Abnormale Beendigung: Wenn eine Ausnahme in der Schleife auftritt, wird else ebenfalls nicht ausgeführt.
Beispiele
Beispiel 1: Grundlegende Verwendung – Ausführen, wenn die Suche fehlschlägt
Beispiel
numbers = [1, 3, 5, 7, 9]
for num in numbers:
if num % 2 == 0:
print(f"Gerade Zahl gefunden: {num}")
break
else:
print("Keine gerade Zahl gefunden")
print("---")
# Fall, in dem die Liste eine gerade Zahl enthält
numbers = [1, 3, 6, 7, 9]
for num in numbers:
if num % 2 == 0:
print(f"Gerade Zahl gefunden: {num}")
break
else:
print("Keine gerade Zahl gefunden")
Erwartete Ausgabe:
未找到偶数 --- 找到偶数: 6
Code-Erklärung:
- Erstes Beispiel: Nach dem Durchlaufen der gesamten Liste (ohne break auszuführen) wird else ausgeführt.
- Zweites Beispiel: Nachdem eine gerade Zahl gefunden wurde, wird break ausgeführt, wodurch else übersprungen wird.
Beispiel 2: Häufige Anwendung – Primzahlen finden
Beispiel
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} ist keine Primzahl, sie ist durch {i} teilbar")
return False
else:
# Die Schleife endet normal, was bedeutet, dass kein Teiler gefunden wurde
print(f"{n} ist eine Primzahl")
return True
# Test
is_prime(7) # Ausgabe: 7 ist eine Primzahl
is_prime(10) # Ausgabe: 10 ist keine Primzahl, sie ist durch 2 teilbar
Erwartete Ausgabe:
7 是质数 10 不是质数,能被 2 整除
Dies ist eine der klassischsten Verwendungen von for-else: Nachdem der Suchdurchlauf abgeschlossen ist, wird else ausgeführt, wenn das Ziel nicht gefunden wurde.
Beispiel 3: Vergleich mit break
Beispiel
fruits = ["apple", "banana", "orange", "grape"]
# Verwendung von for-else
print("=== Verwendung von for-else ===")
for fruit in fruits:
if fruit == "orange":
print(f"Gefunden: {fruit}")
break
print(f"Prüfe: {fruit}")
else:
print("Ziel nicht gefunden")
print("\n"=== break wird nicht verwendet ===")
# Eine andere Möglichkeit (ohne else zu verwenden)
found = False
for fruit in fruits:
if fruit == "orange":
print(f"Gefunden: {fruit}")
found = True
break
print(f"Prüfe: {fruit}")
if not found:
print("Ziel nicht gefunden")
Erwartete Ausgabe:
=== 使用 for-else === 检查: apple 检查: banana 找到: orange === 不使用 else === 检查: apple 检查: banana 找到: orange
Die for-else-Syntax ist prägnanter und erfordert keine zusätzliche Flag-Variable.
Beispiel 4: Umgang mit Schleifenabschluss
Beispiel
scores = [85, 90, 78, 92, 88]
# Prüfen, ob nicht bestandene Noten vorhanden sind
print("=== Prüfen, ob nicht bestandene Noten vorhanden sind ===")
for score in scores:
if score < 60:
print(f"Nicht bestandene Note gefunden: {score}")
break
print(f"{score} Punkte, bestanden")
else:
print("Alle Noten bestanden")
# Ein weiteres Szenario: Aufräumen durchführen, nachdem die gesamte Verarbeitung abgeschlossen ist
print("\n"=== Aufräumen nach Abschluss der Verarbeitung ===")
files = ["a.txt", "b.txt", "c.txt"]
for file in files:
print(f"Datei wird verarbeitet: {file}")
else:
print("Alle Dateien wurden verarbeitet, Aufräumarbeiten werden durchgeführt")
print("--- Aufräumen abgeschlossen ---")
Erwartete Ausgabe:
=== 检查是否有不及格 === 85 分,合格 90 分,合格 78 分,合格 92 分,合格 88 分,合格 所有成绩都及格 === 处理完成后清理 === 处理文件: a.txt 处理文件: b.txt 处理文件: c.txt 所有文件处理完成,执行清理工作 --- 清理完成 ---
for-else kann auch in Szenarien verwendet werden, in denen nach Abschluss "Aufräumarbeiten durchgeführt werden".
Beispiel 5: Praktische Anwendung - Login-Verifizierung
Beispiel
def try_login(username, password):
valid_users = {
"admin": "123456",
"user": "password",
"guest": "guest"
}
print(f"Anmeldeversuch: {username}")
for user, pwd in valid_users.items():
if user == username and pwd == password:
print("Anmeldung erfolgreich!")
return True
else:
# Nach der Iteration über alle Benutzer wurde keine Übereinstimmung gefunden
print("Benutzername oder Passwort falsch")
return False
# Test
try_login("admin", "123456") # Ausgabe: Anmeldung erfolgreich
print("---")
try_login("admin", "wrong") # Ausgabe: Benutzername oder Passwort falsch
Erwartete Ausgabe:
尝试登录: admin 登录成功! --- 尝试登录: admin 用户名或密码错误
for-else ist sehr nützlich in Durchlauf- und Suchszenarien und drückt die "nicht gefunden"-Logik klar aus.
Hinweise
elseelse ist nichtifTeil von if, sondern vielmehrforTeil von for.- Nicht
elseundiffor-else mit if-else verwechseln. - Diese Syntax ist einzigartig in Python; andere Sprachen haben sie nicht.
Andere Erweiterungen
Python3-Schleifenanweisungen