Python for-else-Schleife

Python3 循环语句Python3-Schleifenanweisungen


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

# Gerade Zahlen in der Liste finden, ausgeben, falls gefunden, else ausführen, falls nicht gefunden
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:

  1. Erstes Beispiel: Nach dem Durchlaufen der gesamten Liste (ohne break auszuführen) wird else ausgeführt.
  2. Zweites Beispiel: Nachdem eine gerade Zahl gefunden wurde, wird break ausgeführt, wodurch else übersprungen wird.

Beispiel 2: Häufige Anwendung – Primzahlen finden

Beispiel

# Bestimmen, ob eine Zahl eine Primzahl ist
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

# Szenario: Eine Liste durchlaufen, um ein bestimmtes Element zu finden
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

# Szenario: Prüfen, ob alle Elemente die Bedingung erfüllen
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

# Login-Versuche simulieren
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.
  • Nichtelseundiffor-else mit if-else verwechseln.
  • Diese Syntax ist einzigartig in Python; andere Sprachen haben sie nicht.

Python3 循环语句Python3-Schleifenanweisungen


Andere Erweiterungen