Home / LinuxUser / 2006 / 09 / Programmieren lernen in fünf Schritten

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(179 Punkte bei 5 Stimmen)
Mandriva in Nöten
(161 Punkte bei 4 Stimmen)
Mageia 2 ist fertig
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

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

Der Autor

Dr.-Ing. Stefan Schwarzer verwendet Python seit sechs Jahren und hat zum Thema das Buch "Workshop Python" veröffentlicht. Der selbstständige Softwareentwickler ist unter mailto:sschwarzer@sschwarzer.net zu erreichen.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 102 Punkte (9 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 06/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...