Neben den üblichen Varianten von Schleifen verfügt Python auch über eine so genannte for-else Schleife. In diesem Beitrag sehen wir uns an, wie dieser Typ von Schleife praktisch eingesetzt werden kann.
Angenommen wir haben eine Liste von Strings und möchten die einzelnen Einträge auf eine bestimme Länge überprüfen. Dazu definieren wir uns die Funktion check_len(string_list, string_size)
. Dieser Funktion wird eine Liste mit Strings übergeben, sowie ein Wert für die Bestimmung der Länge. In einer Schleife prüfen wir nun, ob der aktuelle String kürzer oder gleich lang ist wie der Wert string_size. Ist dies der Fall, wird der jeweilige Wert ausgegeben und die Schleife mit break abgebrochen. Wird die Liste durchlaufen, ohne dass ein einziger Wert mit der gesuchten Eigenschaft gefunden wurde, wird der else Zweig ausgeführt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# strings in string_list auf Länge überprüfen def check_len(string_list, string_size): for i in string_list: if len(i) <= string_size: print(i, '<=', string_size, sep = ' ') break # kein String mit entsprechender string_size gefunden else: print('Kein String in Liste <=', string_size) string_list = ['Kamille', 'Sonnenblume', 'Huflattich', 'Enzian'] string_size = 4 check_len(string_list, string_size) |
Kein String in Liste <= 4
Alle Pflanzennamen in der Liste sind länger als vier Zeichen. Somit wird die break Anweisung nie ausgeführt und stattdessen der else Zweig durchlaufen. Würden wir in diesem Fall eine normale for Schleife verwenden, müssten wir den Leerfall mit einer eigenen Logik auswerten. Statt dessen können wir ihn direkt behandeln.
Im zweiten Anwendungsfall definieren wir die Funktion check_num(num_list, divisor)
. Diese stellt fest, ob die Zahlen der Liste num_list durch den Wert divisor ohne Rest teilbar sind.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Liste von Zahlen auf Teilbarkeit prüfen def check_num(num_list, divisor): for i in num_list: if i%divisor == 0: print(i, 'ist durch', divisor ,'teilbar') break else: print('Keine Zahl in Liste teilbar durch', divisor) num_list = [i for i in range(10, 21)] divisor = 13 check_num(num_list, divisor) |
13 ist durch 13 teilbar
In diesem Fall wurde ein echter Teiler der Zahl 13 gefunden und die break Anweisung erreicht. Eine etwaige else Anweisung in einer for Schleife wird nur ausgelöst, wenn die Schleife vollständig und ohne Unterbrechung durchlaufen wird. Da der Ablauf im aktuellen Fall unterbrochen wurde, ist es nicht zur Ausführung des else Zweiges gekommen.
Das komplette Beispiel herunterladen: python_for_else.zip
Hinterlasse jetzt einen Kommentar