Programmschleifen


  1. While-Schleife
  2. For-Schleife
  3. pass-Platzhalter
  4. range

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:

  • Mit break wird die Schleife unmittelbar an der jeweiligen Stelle beendet. Dies ist eine wichtige Anweisung, wenn Schleifen formal als Endlosschleife definiert werden.
  • Mit continue kann der Rest des aktuellen Schleifendurchlaufs übersprungen werden; die Schleife wird anschließend mit dem nächsten Schleifendurchlauf fortgesetzt.
  • Beide Möglichkeiten sind ein Relikt aus der ersten Zeit von Programmiersprachen, die den sogenannten Spagetticode ermöglicht haben. Grundsätzlich kann durch entsprechende Befehle auch strukturierter Code erstellt werden.

    Eine typische Endlosschleife wäre:

    # Hinweis
    while True:
        ... Anweisung ...
        ... Anweisung ...
        ...    ...    ...
        if bedingung:
            break
        ... Anweisung ...
        ... Anweisung ...
        ...    ...    ...

    for-Schleifen

    Eine for-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