Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einleitung
2 Überblick über Python
3 Die Arbeit mit Python
4 Der interaktive Modus
5 Grundlegendes zu Python-Programmen
6 Kontrollstrukturen
7 Das Laufzeitmodell
8 Basisdatentypen
9 Benutzerinteraktion und Dateizugriff
10 Funktionen
11 Modularisierung
12 Objektorientierung
13 Weitere Spracheigenschaften
14 Mathematik
15 Strings
16 Datum und Zeit
17 Schnittstelle zum Betriebssystem
18 Parallele Programmierung
19 Datenspeicherung
20 Netzwerkkommunikation
21 Debugging
22 Distribution von Python-Projekten
23 Optimierung
24 Grafische Benutzeroberflächen
25 Python als serverseitige Programmiersprache im WWW mit Django
26 Anbindung an andere Programmiersprachen
27 Insiderwissen
28 Zukunft von Python
A Anhang
Stichwort

Download:
- ZIP, ca. 4,8 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Python von Peter Kaiser, Johannes Ernesti
Das umfassende Handbuch - Aktuell zu Python 2.5
Buch: Python

Python
gebunden, mit CD
819 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1110-9
Pfeil 6 Kontrollstrukturen
  Pfeil 6.1 Fallunterscheidungen
    Pfeil 6.1.1 If, elif, else
    Pfeil 6.1.2 Conditional expressions
  Pfeil 6.2 Schleifen
    Pfeil 6.2.1 While-Schleife
    Pfeil 6.2.2 Vorzeitiger Abbruch einer Schleife
    Pfeil 6.2.3 Vorzeitiger Abbruch eines Schleifendurchlaufs
    Pfeil 6.2.4 For-Schleife
  Pfeil 6.3 Die pass-Anweisung

»To iterate is human, to recurse divine« – L. Peter Deutsch

6 Kontrollstrukturen

Unter einer Kontrollstruktur versteht man ein Konstrukt, mit dessen Hilfe sich der Ablauf eines Programms steuern lässt. Dabei unterscheidet man in Python zwei Arten von Kontrollstrukturen: Schleifen und Fallunterscheidungen. Schleifen dienen dazu, einen Codeblock mehrmals auszuführen. Fallunterscheidungen hingegen knüpfen einen Codeblock an eine Bedingung, sodass er nur ausgeführt wird, wenn die Bedingung erfüllt ist. Wie und in welchem Umfang diese zwei Typen unterstützt werden, ist von Programmiersprache zu Programmiersprache verschieden. Python kennt jeweils zwei Unterarten, die wir hier behandeln werden.

Auch wenn das in den kommenden Beispielen noch nicht gezeigt wird, können Kontrollstrukturen beliebig ineinander verschachtelt werden. Die Einrückungstiefe wächst dabei kontinuierlich.


Galileo Computing - Zum Seitenanfang

6.1 Fallunterscheidungen  Zur nächsten ÜberschriftZur vorigen Überschrift

In Python gibt es zwei Arten von Fallunterscheidungen: die klassische if-Anweisung und die sogenannte conditional expression als erweiterte Möglichkeit der bedingten Ausführung von Code. Wir werden im Folgenden beide Arten der Fallunterscheidung detailliert besprechen und mit Beispielen erläutern. Dabei werden wir mit der if-Anweisung beginnen.


Galileo Computing - Zum Seitenanfang

6.1.1 If, elif, else  Zur nächsten ÜberschriftZur vorigen Überschrift

Die einfachste Möglichkeit der Fallunterscheidung ist die if-Anweisung. Eine if-Anweisung besteht aus einem Anweisungskopf, der eine Bedingung enthält, und aus einem Codeblock als Anweisungskörper (siehe Abbildung 6.1).

Der Codeblock wird nur ausgeführt, wenn sich die Bedingung als wahr herausstellt. Die Bedingung einer if-Anweisung muss dabei ein Ausdruck sein, der nach seiner Auswertung einen Wahrheitswert (True oder False) ergibt. Typischerweise werden hier die logischen Ausdrücke angewendet, die in Abschnitt 4.5 eingeführt wurden.

Abbildung 6.1  Struktur einer if-Anweisung

Als Beispiel betrachten wir eine if-Anweisung, die einen entsprechenden Text nur dann ausgibt, wenn die Variable x den Wert 1 hat:

if x == 1: 
    print "x hat den Wert 1"

Beachten Sie, dass für dieses und die folgenden Beispiele eine Variable x bereits existieren muss. Sollte dies nicht der Fall sein, so bekommen Sie einen NameError.

Selbstverständlich können auch andere vergleichende Operatoren oder ein komplexerer logischer Ausdruck verwendet werden und mehr als eine Anweisung im Körper stehen:

if (x <= 1) and (x * x > 20): 
    print "x ist kleiner ..." 
    print "...oder gleich 1"

In vielen Fällen ist es mit einer einzelnen if-Anweisung nicht getan, und man benötigt eine ganze Kette von Fallunterscheidungen. Wir möchten im nächsten Beispiel zwei unterschiedliche Strings ausgeben, je nachdem, ob x == 1 oder x == 2 gilt. Dazu wäre nach Ihrem bisherigen Kenntnisstand folgender Code notwendig:

if x == 1: 
    print "x hat den Wert 1" 
if x == 2: 
    print "x hat den Wert 2"

Dies ist aus Sicht des Interpreters eine ineffiziente Art, das Ziel zu erreichen, denn beide Bedingungen werden in jedem Fall ausgewertet und überprüft. Jedoch bräuchte die zweite Fallunterscheidung nicht mehr in Betracht gezogen zu werden, wenn die Bedingung der ersten bereits True ergeben hat. Die Variable x kann unter keinen Umständen sowohl den Wert 1 als auch 2 haben. Um solche Fälle aus Sicht des Interpreters performanter und aus Sicht des Programmierers übersichtlicher zu machen, kann eine if-Anweisung um einen oder mehrere sogenannte elif-Zweige (»elif« ist ein Kürzel für »else if«) erweitert werden.

Die Bedingung eines solchen Zweiges wird nur evaluiert, wenn alle vorherigen if- bzw. elif-Bedingungen False ergaben.

Das obige Beispiel kann mithilfe von elif folgendermaßen verfasst werden:

if x == 1: 
    print "x hat den Wert 1" 
elif x == 2: 
    print "x hat den Wert 2"

Eine if-Anweisung kann um beliebig viele elif-Zweige erweitert werden:

Abbildung 6.2  Struktur einer if-Anweisung mit elif-Zweigen

Im Quelltext könnte dies folgendermaßen aussehen:

if x == 1: 
    print "x hat den Wert 1" 
elif x == 2: 
    print "x hat den Wert 2" 
elif x == 3: 
    print "x hat den Wert 3"

Als letzte Erweiterung der if-Anweisung ist es möglich, alle bisher unbehandelten Fälle auf einmal abzufangen. So möchten wir beispielsweise nicht nur einen entsprechenden String ausgeben, wenn x == 1 bzw. x == 2 gilt, sondern zusätzlich in allen anderen Fällen, also zum Beispiel x == 35, eine Fehlermeldung. Dazu kann eine if-Anweisung um einen sogenannten else-Zweig erweitert werden. Ist dieser vorhanden, so muss er an das Ende der if-Anweisung geschrieben werden (siehe Abbildung 6.3):

Konkret im Quelltext kann dies so aussehen:

if x == 1: 
    print "x hat den Wert 1" 
elif x == 2: 
    print "x hat den Wert 2" 
else: 
    print "Fehler: Der Wert von x ist weder 1 noch 2"

Abbildung 6.3  Struktur einer if-Anweisung mit else-Zweig

Der dem else-Zweig untergeordnete Codeblock wird nur dann ausgeführt, wenn alle vorherigen Bedingungen nicht erfüllt waren. Zu einer if-Anweisung darf maximal ein else-Zweig gehören. Im Beispiel wurde else in Kombination mit elif verwendet, was möglich, aber nicht zwingend ist.


Hinweis
Sollten Sie bereits eine Programmiersprache wie C oder Java beherrschen, so wird Sie interessieren, dass in Python kein Pendant zur switch/case-Kontrollstruktur dieser Sprachen existiert. Das Verhalten dieser Kontrollstruktur kann trotzdem durch eine Kaskade von if/elif/else Zweigen nachgebildet werden.


Abschließend soll die folgende Grafik den Aufbau einer if-Anweisung noch einmal zusammenfassend und übersichtlich darstellen:

Abbildung 6.4  Aufbau einer if-Anweisung


Galileo Computing - Zum Seitenanfang

6.1.2 Conditional expressions  topZur vorigen Überschrift

Betrachten Sie, in Anlehnung an den vorherigen Abschnitt, einmal folgenden Code:

if x == 1: 
    var = 20 
else: 
    var = 30

Es ist festzustellen, dass wir für einen geringfügigen Unterschied in der Zuweisung satte vier Zeilen Code benötigt haben, und es drängt sich die Frage auf, ob wir hier nicht mit Kanonen auf Spatzen schießen. Wir werden Ihnen jetzt zeigen, dass dieser Code mithilfe einer sogenannten conditional expression (dt. bedingter Ausdruck) in eine Zeile passt.

Ein solcher bedingter Ausdruck kann abhängig von einer Bedingung zwei verschiedene Werte annehmen. So ist es zum Beispiel möglich, var in derselben Zuweisung je nach Wert von x entweder auf 20 oder auf 30 zu setzen:

var = (20 if x == 1 else 30)

Die Klammern umschließen in diesem Fall den bedingten Ausdruck. Sie sind nicht notwendig, erhöhen aber die Übersicht. Der Aufbau einer conditional expression orientiert sich an der englischen Sprache und lautet folgendermaßen:

A if Bedingung else B

Sie nimmt dabei entweder den Wert A an, wenn die Bedingung erfüllt ist, oder andernfalls den Wert B. Sie könnten sich also vorstellen, dass die conditional expression nach dem Gleichheitszeichen entweder durch A oder B, also durch 20 oder 30 ersetzt wird. Nach der Auswertung des bedingten Ausdrucks ergibt sich also wieder eine gültige Zuweisung.

Diese Form, eine Anweisung an eine Bedingung zu knüpfen, kann selbstverständlich nicht nur auf Zuweisungen angewandt werden. Im folgenden Beispiel wird mit derselben print-Anweisung je nach Wert von x ein anderer String ausgegeben:

print ("x hat den Wert 1" if x == 1 else "x ist ungleich 1")

Beachten Sie, dass es sich bei Bedingung um einen logischen sowie bei A und B um einen beliebigen arithmetischen Ausdruck handeln kann. Eine conditional expression kann folglich auch so aussehen:

xyz = (a ** 2 if (a > 10 and b < 5) else b ** 2)

Dabei ist zu beachten, dass sich die Auswertungsreihenfolge der bedingten Ausdrücke von den normalen Auswertungsregeln von Python-Code unterscheidet. Es wird immer zunächst die Bedingung ausgewertet und erst dann, je nach Ergebnis, entweder der linke oder der rechte Teil des Ausdrucks. Eine solche springende Auswertungsreihenfolge wird lazy evaluation genannt.

Die hier vorgestellten conditional expressions können in der Praxis dazu verwendet werden, umständlichen und langen Code sehr elegant zu verkürzen. Allerdings geht all das stark auf Kosten der Lesbarkeit und Übersichtlichkeit. Wir werden deshalb in diesem Buch nur in Ausnahmefällen davon Gebrauch machen. Es steht Ihnen allerdings frei, conditional expressions in Ihren eigenen Projekten nach Herzenslust zu verwenden.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Python






Python
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Praxisbuch Objektorientierung






 Praxisbuch Objektorientierung


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de