Kontrollstrukturen

Werbung
Modul: Programmierung B-PRG
Grundlagen der Programmierung 1 – Teil 1 – V6
Kontrollstrukturen
Prof. Dr. Detlef Krömker
Professur für Graphische Datenverarbeitung
Institut für Informatik
Fachbereich Informatik und Mathematik (12)
Hier wird Wissen Wirklichkeit
Rückblick
Text – Strings – Characters
verschiedene Kodierungen: von ASCII bis Unicode
Kodierung vs. Schriftgestaltung
2
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
1
Unser heutiges Lernziel
‣
Verzweigung, Iteration (und Rekursion am Freitag) sind als
grundlegende mathematische und informatische Lösungsmethoden zu
erfassen und deren Realisierungen in Programmiersprachen sind
kennen zu lernen.
‣
Hierzu gehören insbesondere die verschiedenen Ausprägungen von
Schleifen (zur Iteration)
3
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Übersicht
Verzweigungen
Prinzipien
Graphische Repräsentationen
Iterative Grundstrukturen
Prinzipien
Schleifen: Realisierungsformen der Iteration
Kontrollstrukturen in Python
if – else – elif
for und while
break – continue - else
4
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
2
Kontrollstrukturen
Verzweigungen bilden zusammen mit den Schleifen die
Kontrollstrukturen moderner Programmiersprachen.
In allen imperativen und objektorientierten Sprachen sind sie in
unterschiedlichen Ausprägungen vorhanden.
Leistungsfähige Schleifenkonstrukte zusammen mit
Unterprogrammmethoden sind essentielle Konstituenten der
strukturierten Programmierung (dritte ProgrammiersprachenGeneration) aber auch der Objektorientierten Programmierung.
5
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Verzweigungen
‣
Eine Wertabhängige Fallunterscheidung ist sowohl in der Mathematik als auch
in der Informatik elementar für jede Art von Algorithmen.
‣
Aufgrund einer Bedingung wird der Programmfluss (die Abfolge der Ausführung
der Befehle) verzweigt. Wir unterscheiden die einfache (bedingte)
Verzweigung die den Programmfluss in zwei Pfade auftrennt und eine
mehrfache Verzweigung.
‣
Realisiert ist dies in den meisten Programmiersprachen sehr ähnlich, ungefähr
folgendermaßen:
if <Bedingung>
then <Aktionsfolge>
else <AlternativeAktionsfolge>
endif
6
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
3
Die mehrfache Verzweigung (Prinzip)
case <aVariable>
aValue1: <AktionsfolgeA>
aValue2: <AktikonsfolgeB>...
otherwise: <Aktionsfolge>
endcase
7
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Graphische Repräsentationen
Zur Darstellung von Programmstrukturen wurden schon sehr früh
graphische Repräsentationen (visuelle Sprachen) eingesetzt, die
später auch genormt wurden:
‣
Programmablaufpläne (und Datenflusspläne) nach DIN 66001
‣
Nassi-Schneidermann Diagramme nach DIN 66261
‣
Jackson-Diagramme
‣
UML Diagramme (hier allein 14 verschiedene Diagrammarten)
8
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
4
Programmablaufplan
ist ein Ablaufdiagramm für ein Computerprogramm, das auch als
Flussdiagramm (engl. flowchart) oder Programmstrukturplan
bezeichnet wird. Das Konzept der Programmablaufpläne stammt aus
den 1960er-Jahren.
9
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Nassi-Shneiderman-Diagramm
‣
Ein Nassi-Shneiderman-Diagramm (auch Struktogramme genannt)
ist ein Software-Entwurfshilfsmittel (auch Methode) für die strukturierte
Programmierung. Es ist genormt nach DIN 66261. Benannt wurde es
nach seinen Vätern Ike Nassi und Ben Shneiderman
‣
Die Methode zerlegt ein Gesamtproblem, das man mit dem
gewünschten Algorithmus lösen will, in immer kleinere Teilprobleme
‣
bis schließlich nur noch elementare Grundstrukturen wie Sequenzen
und Kontrollstrukturen zur Lösung des Problems übrig bleiben.
‣
Die beiden Autoren konnten mit ihren Diagrammen nachweisen, dass
in keinem Algorithmus ein unbedingter Sprung (GOTO) benötigt wird
10
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
5
Verzweigung: einfach-einseitig
Ablaufplan
Pseudocode
if <Bedingung>
then <Block 1>
endif
wahr
Nassi-Shneiderman
?
Bedingung
wahr
falsch
Block 1
Block 1
Bedingung = ?
11
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Zweifach- und Mehrfach-Verzweigungen
Ablaufplan
Pseudocode
if <Bedingung>
then <Block 1>
else <Block 2>
endif
case <Variable>Wert 1:
<B1>Wert 2:
<B2>...otherwise:
<Bn>endcase
12
Programmieren 1 – Teil 1 – V6
WS 2005/2006
wahr
Bedingung
Nassi-Shneiderman
falsch
wahr
Bedingung
Block 1
Variable =
Wert 1
B1
falsch
Block 2
Block 1
Wert 2
B2
Prof. Dr. Detlef Krömker
sonst
Bn
Wert1
1
B1
Wert2
B2
Block 2
Variable =
Bn
Hier wird Wissen Wirklichkeit
6
Kritik Programmablaufpläne
‣
schon bei mittelgroßen Algorithmen schnell unübersichtlich
‣
zur Verwendung von expliziten Sprunganweisungen (GOTO's)
verführen und damit die Produktion von "Spaghetti-Code" fördern und
wahr
?
falsch
Block 1
A
13
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
B
Hier wird Wissen Wirklichkeit
Programmablaufpläne: Kritik und Nutzung
‣
gut strukturierter Programmcode (ggf. als Pseudocode oder in einer
Skriptsprache wie Python) ist genauso übersichtlich (oder übersichtlicher!)
‣
Korrigiert man einen Fehler in einem Programm müsste dieses natürlich
im Ablaufplan „nachgezogen“ werden
‣
Programmablaufpläne werden heute in der Softwareentwicklung kaum
noch eingesetzt.
‣
Sie erleben allerdings in etwas modifizierter Form eine Renaissance in
Multimedia-Entwicklungsprozessen
‣
sind gut geeignet, elementare Strukturen der Programmierung zu
verdeutlichen.
14
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
7
Nassi-Shneiderman Diagramme
hatten ihre Blütezeit in den 1980er-Jahren, als die strukturierte
prozedurale Programmierung die Technik der Wahl war.
Mit dem Aufkommen objektorientierter Programmiersprachen in den
1990er Jahren verloren beide Methoden an Bedeutung, weil sie die
erweiterten Möglichkeiten, die diese Sprachen bieten, nicht adäquat
abbilden können.
Nassi-Shneidermann Diagramme „wachsen“ (verfeinern sich nach innen)
Variante: Jackson-Diagramm: wächst nach unten und außen
15
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Heute: UML-Diagramme
Unified Modeling Language (1997)
von der Object Management Group (OMG) entwickelt und standardisierte
Beschreibungssprache, um Strukturen und Abläufe in
Objektorientierten Softwaresystemen darzustellen
UML ist de-Facto-Norm für "technische Zeichnungen" von Programmen
und Abläufen.
standardisiert auch das Datenformat, in dem diese „Zeichnung“ abgelegt
wird (sog. XMI, eine XML-Variante)
16
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
8
UML 2.0
Strukturdiagramme
‣ Klassendiagramm (engl. class diagram)
‣ Objektdiagramm (engl. object diagram)
‣ Komponentendiagramm (engl. component diagram)
‣ Kompositionsstrukturdiagramm (auch: Montagediagramm, engl.
composite structure diagram)
‣ Verteilungsdiagramm (engl. deployment diagram)
‣ Paketdiagramm (engl. package diagram)
17
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
UML 2.0
Verhaltensdiagramme
‣ Anwendungsfalldiagramm (auch: Nutzfalldiagramm, use case diagram)
‣ Zustandsdiagramm (engl. statechart)
‣ Aktivitätsdiagramm (engl. activity diagram)
‣ Sequenzdiagramm und Sequenzdiagramm (engl. sequence diagram)
‣ Interaktionsübersichtsdiagramm (engl. interaction overview diagram)
‣ Kommunikationsdiagramm (engl. communication diagram)
‣ Zeitverlaufsdiagramm (engl. timing diagram)
Kollaborationsdiagramme (nicht zu verwechseln mit den gleichnamigen
Diagrammen in UML 1.x, die in UML 2.0 Kommunikationsdiagramme
heißen).
18
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
9
Realisierung in Programmiersprachen
In (fast) allen modernen Programmiersprachen werden
Verzweigungsstrukturen durch
if … then … else realisiert.
Unterschiede finden sich allenfalls in Details der Syntax, z.B. der Art der
Klammerung der Anweisungsblöcke.
Größere Unterschiede in Syntax und Semantik finden wir allerdings bei
Mehrfachverzweigungen:
‣ CASE …
‣ SWITCH … oder
‣ if … then … elif … elif …else.
19
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Realisierung in Python
if – else – elif
if expression:
suite
elif expression:
suite
elif expression:
suite
...
else:
suite
indent
4 Blanks (Leerzeichen) oder
1 Tab(ulator) besser nicht verwenden
„expression“ ist hierbei ein Ausdruck, der sich zu einem booleschen Wert
auswerten lässt,
„suite“ kennzeichnet eine beliebige Anweisungsfolge.
20
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
10
Syntax
if – else – elif
if_stmt
::=
"if" expression ":" suite
( "elif" expression ":" suite )*
["else" ":" suite]
suite ::= stmt_list NEWLINE | NEWLINE INDENT
statement+ DEDENT
statement
::= stateliest NEWLINE | compound_stmt
stmt_list
::= simple_stmt (";" simple_stmt)* [";"]
21
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Beispiel
a = 3
b = 2
if a < b:
pass
elif a == b:
a = a + 1
else: a = a - 1
print a
>>> ================================ RESTART =================
>>>
2
22
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
11
Iterative Grundstrukturen (1)
Die Iteration (von lateinisch iterare, "wiederholen"; engl. iteration) ist ein
grundlegender Lösungsansatz sowohl in der Mathematik als auch der
Informatik mit zwei verschiedenen Ausprägungen:
1. Iteration (in Mathematik und Informatik) ist eine Methode, sich der
Lösung eines Rechenproblems schrittweise, aber zielgerichtet
anzunähern. Sie besteht in der wiederholten Anwendung desselben
Rechenverfahrens.
Meistens iteriert man mit Rückkopplung: Die Ergebnisse eines
Iterationsschrittes (oder alle bisher erzielten Ergebnisse) werden als
Ausgangswerte des jeweils nächsten Schrittes genommen - bis das
Ergebnis zufrieden stellt.
23
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Iteration (Fortsetzung)
‣
Dazu muss man sicher sein (beweisen!), dass die Iterationsfolge
konvergiert und dass der Grenzwert mit der gesuchten Lösung
übereinstimmt.
‣
Die Geschwindigkeit der Konvergenz ist ein Maß dafür, wie brauchbar
die Iterationsmethode ist.
‣
Grundsätzlich wird ein iteratives Lösungsverfahren dann eingesetzt,
wenn das Ergebnis nicht geschlossen berechenbar ist (zum Beispiel
Gleichungen mit transzendenten Funktionen: sin x + cos x = x,
Bestimmung der Nullstellen ab dem Polynomgrad 5, etc.).
‣
Häufig ist eine gute Näherung schon befriedigend.
24
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
12
Ein klassisches Beispiel, die Regula Falsi:
Nullstellen (Wurzeln) eines Polynoms finden:
1. Schritt: Durch schätzen oder probieren ermittelt man ein Intervall (x1, x2)
wo eine Nullstelle von y = f(x) ungefähr liegen könnte, z.B. dadurch,
dass f(x1)>0, f(x2)<0
2. Einen besseren Wert x3 berechnen wir mit der Regula Falsi, die als
Näherung ein gerades Kurvenstück annimmt:
x3 = x 2 + f ( x 2 ) ⋅
x2 − x1
f ( x2 ) − f ( x1 )
3., 4. … i. … Diesen 2. Schritt wiederholen wir jeweils mit xi, und xi-1, bis
uns das Ergebnis „genau genug“ ist.
25
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Iterative Grundstrukturen (2)
2. In der Informatik wird auch von Iteration gesprochen, wenn ein
schrittweiser Zugriff auf Einzelelemente eines zusammengesetzten
Datentyps (Sammlungen), z.B. einen String, erfolgt.
Z.B wird wiederholt auf einen String mit veränderten Indexwert
zugegriffen: in einem Sting “otto“ sollen alle Kleinbuchstaben durch
Großbuchstaben ersetzt werden: “OTTO“.
Eine besondere Bedeutung hat dieses Vorgehen bei Sammlungen (engl.
collections) bei Strukturen wie Felder (engl. arrays), Listen, SchlüsselWert-Paaren (engl. Maps, Hashes, Dictionaries) oder Mengen (engl.
Sets), die wir allerdings detailliert erst in der übernächsten Vorlesung
kennen lernen werden.
26
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
13
Schleifen: Realisierungsformen der Iteration
In Programmiersprachen werden iterative Lösungen beider Art durch
Schleifen realisiert:
Eine Schleife ist eine Kontrollstruktur in imperativen
Programmiersprachen.
Sie wiederholt einen Teil des Codes – den so genannten Schleifenrumpf
oder Schleifenkörper – so lange, bis eine Abbruchbedingung eintritt.
Schleifen, die ihre Abbruchbedingung niemals erreichen oder Schleifen,
die keine Abbruchbedingungen haben, nennen wir Endlosschleifen.
27
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Endlosschleife
kann nur von „außen“ unterbrochen werden durch
ein Zurücksetzen (engl. reset), durch eine Unterbrechung (engl.
interrupt),
durch Ausnahmen (engl. exeptions),
Abschalten des Gerätes oder ähnliches.
Oft, aber nicht immer, ist eine Endlosschleife ein Programmierfehler, weil
das Programm nicht normal beendet werden kann.
Ist die Aufgabe des Programms jedoch z.B. eine Überwachung und
Reaktion auf einen externen (gemeldet durch einen Interrupt) oder
internen Fehlerzustand (gemeldet durch eine Exception), so kann
dieses Verhalten ggf. gewollt sein! Grundsätzlich aber VORSICHT!
28
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
14
Schleifenarten
‣
die kopfgesteuerte oder vorprüfende Schleife, bei der erst die
Abbruchbedingung geprüft wird, bevor der Schleifenrumpf durchlaufen
wird (meist durch das Schlüsselwort WHILE (= solange-bis) angezeigt.
‣
die fußgesteuerte oder nachprüfende Schleife, bei der nach dem
Durchlauf des Schleifenrumpfes die Abbruchbedingung überprüft wird,
z.B. durch ein Konstrukt REPEAT-UNTIL (= wiederholen-bis).
‣
die Zählschleife, eine Sonderform der kopfgesteuerten Schleife, meist
als FOR (= für ) -Schleife implementiert.
29
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Schleifen: Realisierungsformen der Iteration (1)
Schleifenart
vorprüfend
Ablaufplan
falsch
while (B) do
Block
Nassi-Shneidermann
B
B
wahr
Block
Block
nachprüfend
Block
repeat Block
until (B)
Block
falsch
wahr
B
30
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
B
Hier wird Wissen Wirklichkeit
15
Schleifen: Realisierungsformen der Iteration (2)
Schleifenart
Ablaufplan
Zählschleife
for(C=1;B;C++)do
Block
Nassi-Shneidermann
C=1
C=1
B
falsch
B
Block
wahr
C++
C++
Block
31
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Schleifen in Programmiersprachen
Bis auf die rein funktionalen Programmiersprachen (diese brauchen keine
Schleifen) realisieren alle modernen Programmiersprachen eine
Auswahl der hier dargestellten Grundstrukturen.
Sie unterscheiden sich in den benutzten Schlüsselwörtern, der Art der
Klammerung der Programmblöcke ((), {}, begin ... end, etc.) und des
Typs der Laufvariablen sowie deren „Inkrementierung“.
Mit Python werden wir hier eine sehr leistungsfähige Variante kennen
lernen.
32
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
16
Historische Notiz
Noch in den 60er-Jahren waren Sprunganweisungen (GOTO Sprungziel)
in Programmen üblich, was bei größeren Programmen nahezu zur
Unwartbarkeit führte, da sie schnell kaum noch überschaubar wurden
Das GOTO Sprungziel ist eine direkte Abbildung des Maschinenbefehls
JUMP Sprungziel – lediglich musste das Sprungziel jetzt keine
Programmadresse mehr sein, sondern konnte symbolisch als Zahl
oder Name angegeben werden.
33
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Historische Notiz (2)
Schon im Mai 1966 publizierten Böhm und Jacopini einen Artikel, in dem
sie zeigten, dass jedes Programm, das GOTO-Anweisungen enthält, in
ein GOTO -freies Programm umgeschrieben werden kann, das nur mit
Verzweigung (IF <Bedingung> THEN ... ELSE ... ) und einer Schleife
(WHILE <Bedingung> DO xxx) arbeitet (gegebenenfalls unter
Zuhilfenahme von etwas Kodeduplikation und der Einführung von
booleschen Variablen (true/false))
Im März 1968 veröffentlichte Edsger W. Dijkstra seinen legendären
Aufsatz „Go To Statement Considered Harmful“ (Dieser Aufsatz ist
das READING dieser Woche!)
34
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
17
Ein Beispiel für so genannten Spaghetti-Code
mit GOTO-Anweisungen:
GOTO 40
20 UmgeheDasProblem
GOTO 70
40 if (Durcheinander < TötlicheDosis) then GOTO 60
GOTO 20
60 RetteJungfrau
70
...
IF ((Durcheinander < TötlicheDosis)
THEN RetteJungfrau
ELSE UmgeheDasProblem
35
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Kontrollstrukturen in Python
for- und while-Anweisungen sind implementiert.
while_stmt
::=
"while" expression ":" suite
["else" ":" suite]
for_stmt
::=
"for" target list "in" expression_list ":" suite
["else" ":" suite]
target_list
::=
target ("," target)* [","]
target ::=
identifier
| "(" target_list ")"
| "[" target_list "]"
| attributeref
| subscription
| slicing
expression_list
::=
expression ( "," expression )* [","]
36
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
18
Anmerkung
target darf alles sein darf, was links von einem Zuweisungsoperator
stehen darf, also
‣
‣
37
einfache Variablen,
Tupel (x,y,z), etc.
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Die Mächtigkeit der Python for-Schleife
rührt daher, dass die Sequenz S durch einen beliebigen Sequenzdatentyp
(insbesondere dann macht die for-Schleife Sinn) repräsentiert wird,
also entweder
ein String,
eine Liste,
ein Tupel oder
eine Menge (set).
Man kann als expression also eine beliebige Variable eines solchen Typs
angeben, dann wird über alle Elemente iteriert.
38
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
19
Die Mächtigkeit der Python for-Schleife (2)
Es können aber auch Teilbereiche angegeben werden, durch Indizierung
oder wichtiger durch Teilbereichsbildung (Slicing), die
zusammenhängende Bereiche einer Sequenz extrahiert: Die
Bereichsgrenzen sind mit 0 und der Sequenzlänge vorbelegt:
‣
S[1:3] geht von Index 1 bis ausschließlich 3 (also 2)
‣
S[1:] geht vom Index 1 bis zum Ende
‣
S[:-1] nimmt alles bis auf das letzte Element (negative Indizes zählen
vom Ende)
39
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Die Mächtigkeit der Python for-Schleife (3)
Erweiterte Teilbereichsbildung S[i:j:k]
‣
S[::2] ergibt jedes zweite Element der Sequenz S von 0 bis zum Ende
‣
S[::-1] ergibt die Umkehrung der Sequenz
‣
S[4:1:-1] holt Elemente von rechts nach links ab Postion 4 (inklusive)
bis Position 1 (exklusive) ab.
40
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
20
Beispiele
>>> for x in "Ein Text":
print x
>>> for x in "Ein Text"[::-1]:
print x
E
i
n
t
x
e
T
T
e
x
t
41
n
i
E
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
In Zusammenhang mit Listen
Im Zusammenhang mit Listen sind gerade für for-Schleifen sogenannte
‣ Generator Ausdrücke (und List-Comprehension-Ausdrücke)
und die eingebaute Funktion
‣
range ([start,]stop [,step]
interessant. range liefert eine Liste von aufeinander folgenden Integern
zwischen start und stop.
Mit nur einem Parameter (stop) ergeben sich die Zahlen 0...stop-1. step ist
optional und ist die Schrittweite
42
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
21
Um eine Schleife (while oder for) ohne Erreichen der Bedingung zu
beenden, verwendet man die
break-Anweisung.
Um in die nächste Schleifeniteration zu springen (wobei der Rest des
Schleifenrumpfes übersprungen wird) verwendet man die
continue-Anweisung.
Beispiele siehe Skript
43
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Zusammenfassung
‣
Verzweigung, Iteration sind als grundlegende mathematische und
informatische Lösungsmethoden vorgestellt worden
‣
Realisierungen in Python
44
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
22
Fragen und (hoffentlich) Antworten
45
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
Ausblick
Funktionen – Prozeduren - Methoden
Danke für Ihre Aufmerksamkeit
46
Programmieren 1 – Teil 1 – V6
WS 2005/2006
Prof. Dr. Detlef Krömker
Hier wird Wissen Wirklichkeit
23
Herunterladen