################################ Kontrollstrukturen ################################ Python stellt prinzipiell alle aus anderen Programmiersprachen bekannten Kontrollstrukturen für **Schleifen** und **Fallunterscheidungen** bereit. Speziell an Python ist, dass Blöcke innerhalb von Kontrollkonstrukten nicht durch geschweifte Klammern, sondern durch **Einrückung (Indent)** definiert werden. Das Einrücken kann entweder mit dem Tabulator oder durch 4 Leerzeichen realisiert werden. Da die Kontrollstrukturen aus anderen Sprachen bekannt sind, werden sie hier nur rudimentär in Form von Beispielen vorgestellt. Fallunterscheidungen ====================== if-then-else ------------- Die allgemeinste Form einer if-then-else Bedingung lautet:: if Bedingung: Anweisungsblock elif Bedingung: Anweisungsblock elif Bedingung: Anweisungsblock else: Anweisungsblock Sämtliche ``elif``-Blöcke und der ``else``-Block sind optional. Es können beliebig viele ``elif``-Blöcke eingebunden werden. Zu beachten ist der Doppelpunkt am Ende der Kontrollzeilen. Die Bedingungen werden meist unter Verwendung von Operatoren formuliert: * Arithmetische Vergleichsoperatoren: ``==``, ``!=``, ``<``, ``<=``, ``>``, ``>=`` * Logische Operatoren: ``and``, ``or``, ``not``. Beispiel: >>> x=3 >>> y=7 >>> if x<5 and y > 8: ... print 'Oben links' ... elif x<5 and y <=8: ... print 'Unten links' ... elif x>=5 and y > 8: ... print 'Oben rechts' ... else: ... print 'Unten rechts' ... Unten links Conditional Expressions ------------------------ Mit *Conditional Expressions* (bedingte Ausdrücke) können bedingte Variablenzuweisungen deutlich kompakter als mit if-then-else Anweisungen geschrieben werden. So kann z.B. anstelle von >>> wort='start' >>> if wort=='start': ... x='los' ... else: ... x='halt' ... >>> print x los die gleiche Zuweisung mit der Conditional Expression >>> wort='start' >>> x=('los' if wort=='start' else 'halt') >>> print x los geschrieben werden. Die allgemeine Form einer Condtional Expression ist:: (A if Bedingung else B) Daraus ist ersichtlich, dass die Conditional Expression nicht nur im Zusammenhang mit einer Zuweisung stehen kann, sondern z.B. auch als Argument einer Methode übergeben werden kann: >>> print ('los' if wort=='start' else 'halt') los Schleifen =========== Python unterstützt sowohl for- als auch while-Schleifen. While-Schleifen ---------------- Die allgemeinste Form einer While-Schleife lautet:: while Bedingung: Anweisungsblock if Bedingung: Anweisungsblock continue Anweisungsblock if Bedingung: Anweisungsblock break Anweisungsblock else: Anweisungsblock Hierbei sind die Blöcke um ``continue`` um ``break`` und um ``else`` optional. Mit dem Schlüsselwort ``continue`` wird eine Schleifeniteration vorzeitig verlassen und gegegebenenfalls die nächste Iteration der Schleife gestartet. Mit ``break`` wird die gesamte While-Schleife vorzeitig verlassen. Der ``else``-Block nach der While-Schleife wird genau einmal ausgeführt, nachdem die While-Schleife regulär beendet wurde. Der ``else``-Block wird nicht ausgeführt, wenn die Schleife vorzeitig durch ``break`` beendet wird. .. _kapForSchleife: For-Schleifen ---------------- Die allgemeinste Form einer For-Schleife lautet:: for Variable in Objekt: Anweisungsblock if Bedingung: Anweisungsblock continue Anweisungsblock if Bedingung: Anweisungsblock break Anweisungsblock else: Anweisungsblock Die Blöcke um ``continue``, ``break`` und ``else`` haben die gleiche Bedeutung wie im Zusammenhang mit while-Schleifen. Die Zählvariable läuft über alle Elemente eines iterierbaren Datentyps. Dazu gehören z.B. die :ref:`Sequentielle Datentypen ` oder die :ref:`Dictionaries `. Soll die Variable nur über einen Bereich ganzer Zahlen iterieren, dann bietet sich als Objekt eine mit der :func:`range`-Funktion erzeugte Liste an. **Beispiel:** Iteration über Liste ganzer Zahlen >>> for x in range(4,9,2): ... print x ... 4 6 8 **Beispiel:** Iteration über Schlüssel eines Dictionaries >>> d=dict((('alter',10),('geschlecht','m'),('wohnort', 'stuttgart'))) >>> for x in d: ... print x,": ",d[x] ... geschlecht : m wohnort : stuttgart alter : 10 **List comprehension:** Mit for-Schleifen lassen sich auch Listen kompakt erzeugen, z.B. >>> persDesc=[d[x] for x in d if x !='wohnort'] >>> persDesc ['m', 10] Die Zählvariable kann auch aus mehreren Elementen bestehen, wie folgendes Beispiel veranschaulicht: >>> for k,v in d.items(): ... print k,v ... geschlecht m wohnort stuttgart alter 10 Die ``enumerate``-Funktion, angewandt auf einen iterierbaren Typ, liefert nicht nur die einzelnen Elemente, sondern darüber hinaus einen Zählindex: >>> personen =[hanny, nanny, fanny] >>> for index,person in enumerate(personen): ... print index,person ... 0 hanny 1 nanny 2 fanny