Mit Schleifen können Codesequnzen wiederholt ausgeführt werden. Python hat dafür
zwei Schleifentypen reserviert: Mit der while
-Schleife wird der Code, der sich innerhalb der Schleife befindet, so
lange ausgeführt, wie eine angegebene Bedingung wahr ist. Mit einer for
-Schleife kann man über Zahlenbereiche oder allgemein
einer Liste von Werten iterieren.
while-Schleife
Es gilt folgende Syntax:
# Hinweis while bedingung: ... Anweisung ... # Einrückung beachten! ... Anweisung ... ... ... ... else: ... Anweisung ... # Einrückung beachten! ... Anweisung ... ... ... ...
Ist die Bedingung wahr, so werden die im unmittelbar folgenden und eingerückten Block stehenden Anweisungen
ausgeführt. Vor jedem weiteren Durchlauf wird wieder geprüft, ob die angegebene
Bedingung wahr ist; sobald dies nicht der Fall ist, wird die Schleife abgebrochen.
Unmittelbar an den while
-Block kann optional auch noch ein else
-Block angefügt werden,
der genau einmal ausgeführt wird, sobald die while
-Bedingung das erste mal nicht erfüllt
ist, also den
Wahrheitswert False annimmt. Damit kann beispielsweise eine Programmstruktur folgender Art geschaffen werden:
# Hinweis while eingabe != passwort: ... weitere Texteingabe ... else: ... richtiges Passwort ...
Ein vollständiges Beispiel wäre:
# Hinweis zugangsliste1 = ("hans","geheim","otto","passwort","fred","feuerstein") user = input("User: ") pw = input("Passwort: ") vorhanden = False i=0 while i < len(zugangsliste1): if (user == zugangsliste1[i]) and (pw == zugangsliste1[i + 1]): # if user == zugangsliste1[i] and pw == zugangsliste1[i + 1]: # weniger übersichtlich vorhanden = True break i=i+2 if vorhanden: print("Vorhanden") else: print("Falsch")Klicken Sie hier, um das Beispiel pw0.ipynb laufen zu lassen; interaktive Aktionen sind mit "Python online" leider nicht möglich. Oder kopieren Sie das BEispiel in Ihren eigenen Editor.
Gleiches lässt sich auch mit der for
-Schleife erreichen, da hier nur über die Werte
der Liste zugangsliste1
iteriert wird. Dazu wird mit len()
die Länge der Liste bestimmt und mit
range(start,ende,schrittweite)
die numerische Zahlenfolge festgelegt:
# Hinweis zugangsliste1 = ("hans","geheim","otto","passwort","fred","feuerstein") user = input("User: ") pw = input("Passwort: ") vorhanden = False for i in range(0, len(zugangsliste1), 2): # start 0, ende 5, step 2 if user == zugangsliste1[i] and pw == zugangsliste1[i + 1]: vorhanden = True break if vorhanden: print("Vorhanden") else: print("Falsch")
Klicken Sie hier, um das Beispiel pw1.ipynb laufen zu lassen; interaktive Aktionen sind mit "Python online" leider nicht möglich. Oder kopieren Sie das BEispiel in Ihren eigenen Editor.
break
und continue
Der Ablauf einer while
- oder for
for-Schleife kann durch folgende beide Schlüsselwörter im Inneren des Anweisungsblocks beeinflusst werden:
break
wird die Schleife unmittelbar an der jeweiligen Stelle beendet.
Dies ist eine wichtige Anweisung, wenn Schleifen formal als Endlosschleife definiert werden.continue
kann der Rest des aktuellen Schleifendurchlaufs übersprungen
werden; die Schleife wird anschließend mit dem nächsten Schleifendurchlauf fortgesetzt.Eine typische Endlosschleife wäre:
# Hinweis while True: ... Anweisung ... ... Anweisung ... ... ... ... if bedingung: break ... Anweisung ... ... Anweisung ... ... ... ...
for-Schleifen
Einefor
-Schleife hat allgemein folgende Syntax, wobei die if
-Blöcke optional sind:
# Hinweis for var in iterierbares-objekt: ... Anweisung ... ... Anweisung ... ... ... ... if bedingung: ... Anweisung ... ... Anweisung ... ... ... ... continue if bedingung: ... Anweisung ... ... Anweisung ... ... ... ... break ... Anweisung ... ... Anweisung ... ... ... ...
Ein iterierbares Objekt kann beispielsweise eine Liste, ein Tupel, oder auch ein String
sein. Im einfachsten Fall kann auch mittels der Funktion range()
ein iterierbares Objekt
mit bestimmter Länge erzeugt werden.
Im folgendem Beispiel durchläuft die Laufvariable i alle Werte im angegebenen Zahlenbereich,
wobei bei Verwendung von range()
die untere Schranke zum Zahlenbereich dazugehört,
die obere jedoch nicht; es werden im obigen Beispiel daher alle Zahlen von 1 bis 100 addiert (Summe der
ersten 100 natürlichen Zahlen. Imfolgenden dann die ungeraden und geraden Zahlen:
summe = 0 n = 100 for i in range(1,n+1): # 1...100, jeweils inklisive summe += i print(summe) print(n*(n+1)/2) summe = 0 for i in range(1,n+1,2): # Summe aller ungeraden Zahlen summe += i print(summe) print((n//2)**2) summe = 0 for i in range(0,n+1,2): # Summe aller geraden Zahlen summe += i print(summe) print(n*(n+2)/4)
pass
– Platzhalter
Eine Schleifenanweisung darf nicht ohne Anweisung(en) erscheinen. Bei der Entwicklung eines Programmes
kann durchaus der Fall auftreten, dass man sich über den Kopf einer Schleife im Klaren ist, aber
nicht über die folgenden Anweisungen. Mithilfe von pass
hat man die geforderte Anweisung,
die aber nichts weiter veranlasst.
# Hinweis var_1 = None if var_1 is None: pass else: print( "The value of var_1 is %s ." % var_1 )
Die Anweisung pass
ist immer dort angebracht, wo aufgrund der geforderten Syntax
eine Anweisung erscheinen muss, obwohl man entwicklungstechnisch gesehen, noch nicht
weiß, wie diese lauten soll.
range
– Schleifenwerte
Syntax:
# Hinweis # With one integer argument it # counts from 0 to stop-1, that are stop values range(stop) # With two integer arguments it # counts from start to stop-1, that are stop-start values range(start, stop) # With three integer arguments it # counts from start to stop-1, # with a defined step size range(start, stop, step)
Example 1
for i in range(5): print(i)
Example 2
for i in range(2,5): print(i)
Example 3, positive step value
for i in range(3,15,3): print(i)
Example 3, negative step value.
for i in range(15,3,-3): print(i)
Die iter
Funktion
my_range = range(0, 3) my_iter = iter(my_range)# nimmt jeweils den nächsten Wert aus my_range print(next(my_iter)) print(next(my_iter)) print(next(my_iter)) # throws a StopIteration exception # See the Error tab! #print(next(my_iter))
Eine Liste mit range
erstellen
my_list = list(range(0, 5)) print(type(my_list),my_list) test = 4 print("Die Variable test ist ",end="") if not test in my_list: print("nicht ",end="") print("Teil der Liste!")
Weitere Beispiele zu Loops findet man in loops.html.
Nächste Einheit: 04 Funktionen