Einstieg in Python
Programmieren lernen in fünf Schritten
Jetzt geht's rund
Python kennt sowohl while- als auch for-Schleifen. Ein Beispiel für eine while-Schleife:
summe = 0.0
while True:
eingabe = raw_input(
"Zahlenwert: ")
if eingabe == "ende":
print "Summe =", summe
break
# eingabe explizit in
# Fließkommazahl wandeln
summe = summe + float(eingabe)
Wie Sie sehen, lässt sich die Schleife mit break verlassen. Die Anweisung continue ermöglicht, den aktuellen Schleifendurchlauf abzubrechen und den nächsten zu starten (falls die while-Bedingung noch zutrifft). Beide Schlüsselwörter sind auch in for-Schleifen möglich.
Die for-Schleife iteriert stets über Sequenzen (genauer: Iteratoren, dazu in einer späteren Folge mehr). Hier ein Beispiel:
for a, b in [(1, 2), [3, "abc"],
("x", 7)]:
print a, b
Hier sehen Sie wieder das automatische "Entpacken" von Tupeln mit impliziten Zuweisungen an a und b, wobei der "entpackte" Wert wie beim zweiten Listenelement auch eine Liste sein darf. Normalerweise nicht zu empfehlen ist diese Variante, die explizit den Listenindex verwendet:
L = [(1, 2), [3, "abc"],
("x", 7)]
for i in range(len(L)):
print L[i][0], L[i][1]Diese Variante ist nicht nur umständlicher als der erste Ansatz, sondern auch wesentlich fehleranfälliger.
Die for-Anweisung setzt nicht voraus, dass die zu durchlaufenden Werte nach dem Schlüsselwort in schon zu Beginn der Schleife bekannt sind. Der folgende Code öffnet die Datei "text" und zählt, in wie vielen Zeilen das Wort "Python" (ungeachtet der Schreibweise) vorkommt. Dabei liest der Code bei jedem Schleifendurchlauf eine neue Zeile aus der Datei, bis er sie komplett verarbeitet hat. Dadurch müssen nicht alle Zeilen auf einmal in den Speicher geladen werden müssen, was bei großen Dateien ungünstig wäre.
datei = open("text")
zeilenzahl = 0
for zeile in datei:
if "python" in zeile.lower():
zeilenzahl += 1
datei.close()
print 'Vorkommnisse von "python":', zeilenzahl
Bei dem Dateiobjekt handelt es sich um einen so genannter Iterator. Der Vorteil von Iteratoren ist, dass sie "unendlich" sein können. Zum Beispiel kann man einen Iterator schreiben, der bei jedem Schleifendurchlauf die nächste ganze Zahl liefert, bis die Schleife mit break verlassen wird.
Ein Sonderfall von Schleifen und Fallunterscheidungen findet sich bei den "List Comprehensions". Hier lassen sich mehrere for-Konstrukte verschachteln; der if-Teil darf fehlen. Das folgende Beispiel erzeugt eine Liste mit den Quadraten der ganzen Zahlen von 0 bis 10:
>>> [x 2 for x in range(10+1) … if x % 2 == 0] [0, 4, 16, 36, 64, 100]
Damit die durch range erzeugte Liste auch die 10 enthält, muss das Argument 11 sein – analog zur Verwendung des zweiten Index in Slices. x % 2 liefert den Rest der Ganzzahldivision von x und 2. Bei geraden Zahlen ist dieser Rest 0 und damit die Bedingung falsch. Daher muss sie durch den Vergleich mit 0 wahr werden, weil uns ja gerade die Quadrate der geraden Zahlen interessieren.
Übrigens geht es noch etwas einfacher, wenn wir range ein Argument für die Schrittweite mitgeben (der kleinste Wert der Liste, 0, muss dann ebenfalls angegeben werden):
>>> [x 2 … for x in range(0, 10+1, 2)] [0, 4, 16, 36, 64, 100]
Ausblick
Im nächsten Heft erfahren Sie, wie Sie Funktionen in Python verwenden und wie Sie zusammengehörige Funktionen in eigenen Modulen gruppieren.
Glossar
Encoding
Das Encoding gibt an, durch welche Bytefolgen Zeichen ausgedrückt werden. Bekannte Encodings sind ASCII, ISO-8859-1 (Latin 1) und UTF-8. Bei ASCII und ISO-8859-1 wird jedes Zeichen durch genau ein Byte dargestellt, bei UTF-8 durch bis zu vier Byte pro Zeichen. Das erhöht die Menge der darstellbaren Zeichen.
Infos
[1] Python-Homepage: http://www.python.org/
[2] Python-Online-Dokumentation: http://www.python.org/doc/
[3] Python-Referenz: http://www.limsi.fr/Individu/pointal/python/pqrc/versions/PQRC-2.4-A4-latest.pdf
[4] Parser-Generatoren: http://wiki.python.org/moin/LanguageParsing
[5] Spieleprogrammierung mit pygame: http://www.pygame.org/
[6] PDF-Erzeugung mit Reportlab: http://www.reportlab.org/rl_toolkit.html
[7] Tkinter: http://wiki.python.org/moin/TkInter
[8] PyGTK: http://wiki.python.org/moin/PyGtk
[9] wxPython: http://www.wxpython.org/
[10] PyQt: http://wiki.python.org/moin/PyQt
[11] Python Package Index (PyPI): http://www.python.org/pypi
[12] IPython: http://ipython.scipy.org/
[13] Python Style Guide: http://www.python.org/dev/peps/pep-0008/
[14] Zeichenketten-Ersetzung: http://docs.python.org/lib/typesseq-strings.html
[15] Methoden für eingebaute Datentypen: http://docs.python.org/lib/types.html
[16] copy-Modul: http://docs.python.org/lib/module-copy.html
[17] Python-Unicode-FAQ: http://p-nand-q.com/python/unicode_faq.html



