Python: Anweisungen und Variablen

Willemers Informatik-Ecke


Bestellen bei Amazon

Diese Seiten sind Grundlage meines Python-Buchs aus den ersten Recherchen.

Anweisungen

Python-Anweisungen stehen normalerweise in einer Zeile. Mehrere Anweisungen können in einer Zeile stehen, wenn sie durch Semikolen getrennt sind, was aber vermieden werden sollte. Lange Zeilen können umbrochen werden, wenn ein Backslash ans Ende gesetzt wird. Ist eine Klammerung noch nicht abgeschlossen, erkennt Python, dass die Anweisung noch nicht zu Ende ist und setzt sie automatisch in der Folgezeile fort.

Abfragen, Schleifen und Definitionen enden mit einem Doppelpunkt. Folgezeilen, die darunter gehören, werden gleichmäßig eingerückt.

Kommentare

Kommentare werden durch ein Doppelkreuz eingeleitet.
# Dies ist ein Kommentar
zahl = 12 # ab dem Doppelkreuz nur zur Kenntnisnahme
Drei Anführungszeichen leiten einen Blockkommentar ein und aus.
""" Dies ist ein Kommentar
der hört hier noch nicht auf
Erst am Ende dieser Zeile """
Die drei Anführungszeichen bilden gleichzeitig ein mehrzeiliges
Zeichenkettenliteral.

Variablen

Ein Programm speichert seine Daten in Variablen. Jede Variable hat einen Namen, über den ihr Inhalt angesprochen wird. Der Inhalt kann eine Zahl, eine Folge von Buchstaben oder eine Kombination daraus sein.

Ein Variablenname wird aus Buchstaben, Ziffern und Unterstrichen zusammengesetzt. Allerdings darf der Name nicht mit einer Ziffer beginnen. Groß- und Kleinschreibung ist bei den Variablennamen signifikant.

Welchen Typ eine Variable hat, ob sie also Zahlen oder Texte enhält, wird durch eine Zuweisung entschieden, dem sogenannten Duck-Typing. Im folgenden Beispiel wird der Variablen zahl der Wert 12 zugewiesen. Der Typ der Variablen ist nun int (ganzzahlig).

zahl = 12
Eine Variable wird durch seine Zuweisung definiert. Lesende Zugriffe auf nicht definierte Variablen führen zu einer Exception.

Mathematische Ausdrücke

Python kann Zahlen und Variablen miteinander verrechnen und verwendet dazu die in den meisten Programmiersprachen üblichen Operatoren.
OperatorBedeutung
+ Addition
- Subtraktion
* Multiplikation
/ Division
// ganzzahlige Division ohne Rest
% Rest einer ganzzahligen Division
** Exponent
Rangfolge
Die Ausdrücke können kombiniert werden. Die Auswertungsreihenfolge: Operatoren gleicher Ebene werden von links nach rechts ausgewertet.

In einem Ausdruck rechts des Zuweisungszeichen kann auch die Variable links vom Zuweisungszeichen erscheinen. Dann enthält die Variable rechts vom Gleichheitszeichen den Wert, wie er vor der Zuweisung war.

zaehler = 1
zaehler = zaehler + 1
Kurzform:
zaehler = 1
zaehler += 1
Ein ++ oder -- wie in C oder Java gibt es in Python nicht.

Zeichenketten

Zeichenkettenliterale werden durch Anführungszeichen oder Hochkommata eingeschlossen, mehrzeilige Literale in dreifache Anführungszeichen.

gruss = "Hallo!"
name = 'Arnold'
lyrik = """When I see a bird that
walks like a duck and swims like a duck and quacks like a duck,
I call that bird a duck.
(James Whitcomp Riley)"""

Python 2 erlaubt nur ASCII ohne Umlaute im Programmtext. Sollen dennoch Umlaute im Programm verwendet werden, muss in der zweiten Zeile des Skripts die Kodierung stehen.

# -*- coding: utf-8 -*-
# ... oder ...
# -*- coding: iso-8859-1 -*-

Python 3 verwendet standardmäßig UTF-8 im Quelltext, lässt also Umlaute zu. Darauf ist auch IDLE (die mit Python mitgelieferte IDE) eingestellt. Wird unter Windows, das oft noch kein UTF-8 verwendet, der Standardeditor verwendet, muss dessen Kodierung eingetragen werden.

Operationen mit Zeichenketten
Python bringt einige Funktionen mit, um Zeichenketten zu verarbeiten.

Die rechteckigen Klammern

Über die rechteckigen Klammern können Sie Teile der Zeichenkette aus einer Zeichenkettenvariablen ausschneiden. Befindet sich zwischen den rechteckigen Klammern nur eine Zahl, wird nur ein Zeichen geholt.
Name = "James Bond"
print(Name[1])
Die Ausgabe liefert ein a, weil der erste Buchstabe auf der Position 0 steht.

Stehen dort zwei durch Doppelpunkt getrennte Werte, werden sie als Anfangs- und Endposition der gesuchten Zeichenkette aufgefasst. Der folgende print()-Aufruf liefert also ame.

Name = "James Bond"
print(Name[1:3])
Mit der rechteckigen Klammer können Sie auf verschiedene Weise Teile eines Textes aus einer Zeichenkette ausschneiden.
s[i] liefert den i-ten Buchstaben
s[n:m] liefert den Bereich vom n-ten bis zum m-ten Element
s[:n] liefert den Bereich vom Anfang bis zum n-te Element
s[n:] liefert den Bereich ab dem n-ten Element
Negative Werte zwischen die rechteckigen Klammern indizieren von hinten. -1 liefert den letzten Buchstaben, -2 den vorletzten und so weiter.
Fehler
Ist allerdings ein Wert zwischen den rechteckigen Klammern größer oder gleich der Länge der Zeichenkette, gibt es eine Exception.

Über die rechteckigen Klammern können einzelne Buchstaben in einer Zeichenkette nicht verändert werden.

Sonderzeichen

Python verwendet zur Darstellung einiger Sonderzeichen, die innerhalb einer Zeichenkonstante auftreten einen vorangestellten Backslash (\).
\n Zeilenumbruch
\t Tabulatorzeichen
\\ \ als Zeichen
Umwandeln von Zeichenketten
Python 2 kennt neben dem Standardtyp str für Zeichenketten, der für ASCII-Zeichen steht, den Typ unicode. Um eine Unicode-Variable zu initialisieren, wird vor die initialisierende Zeichenkette ein kleines u gestellt.

Ab Python 3 ist dies nicht erforderlich, weil Python alle Zeichenketten als Unicode ablegt, sofern sie nicht explizit als Daten mit einem b für bytes gekennzeichnet sind.

# Python 2
stringUnicode = u"Österliche Grüße"
print(type(stringUnicode)) # gibt 'unicode' aus
Die Umwandlung von Kodierungen erfolgen über die Funktionen encode() und decode().

# -*- coding: iso-8859-1 -*-
# ...
stringIso = "Österliche Grüße"
stringUnicode = stringIso.decode("iso-8859-1")
stringUtf8 = stringUnicode.encode("utf-8")

Zu Fragen des Unicode siehe diese Seite.

Konvertierung Zahlen und Zeichenketten

Zeichenketten eignen sich nicht zum Rechnen. Aber beispielsweise nach der Eingabe durch raw_input() in Python 2 bzw. der Funktion input() in Python 3 enthält eine Variable eine Zeichenkette.

Enthält die Eingabe nur Zahlen, die zum Verrechnen bestimmt sind, müssen sie vorher in Zahlentypen umgewandelt werden. Dabei helfen die Funktionen int() und float() oder die Funktion eval(). Als Parameter erhalten sie jeweils die Zeichenkette. int() liefert einen ganzzahligen Wert zurück, float() eine Fließkommazahl, also eine mit Nachkommastellen.

Python 2 kannte noch einen Typ long. Dieser ist allerdings seit längerer Zeit bereits identisch zu int und nun mit Python 3 entfallen.

ganzzahlvar = int(zeichenkette)
nachkommavar = float(zeichenkette)
Oder allgemeiner: Um aus einer Zeichenkette einen Wert zu ermitteln, verwendet man die Funktion eval(). Die Funktion interpretiert komplette Python-Ausdrücke und ist aus diesem Grund ein potentielles Einfallstor für Befehls-Injection. Darum sollte es mit Bedacht verwendet werden.
zahlvar = eval(zeichenkette)
zahlvar = float(zeichenkette) # Alternative für Fließkommazahlen
zahlvar = int(zeichenkette) # Alternative für ganzzahlige Werte
Um einen Zahlenwert in eine Zeichenkette zu wandeln, wird die Funktion str() verwendet.
zeichenkette = str(zahlvar)

Eingabe und Ausgabe

Mit der Funktion input() werden unter Python 2 Zahleneingaben angefordert. Eine nichtnumerische Eingabe führt zu einer Exception. Für alle anderen Eingaben verwendet Python 2 die Funktion raw_input().

Python 3 kennt raw_input() nicht mehr, sondern verwendet stattdessen input(). Um den Effekt der alten Funktion input() zu erzeugen, verwendet man einfach eval(input())

Die Ausgabe erfolgt mit der Funktion print().

Bis zur Python-Version 2 war print ein Befehl. Seit der Version 3 ist es aber eine Funktion. Darum muss das, was ausgegeben werden soll, nun in Klammern stehen.

Es können mehrere Werte an print() übergeben werden, die dann durch Komma zu trennen sind.
#!/usr/bin/python
print("Wie heissen Sie?")
name = raw_input()
print("Guten Tag,", name)
Wenn Sie in Python 2 ganz an das Ende eines print-Befehls noch ein Komma setzen, erscheint die nächste Ausgabe in der gleichen Zeile. Allerdings sollten Sie berücksichtigen, dass angefangene Zeilen nicht unbedingt sofort auf dem Bildschirm erscheinen, sondern erst, wenn in die nächste Zeile gewechselt wird.

Die Funktionen input() und raw_input() erlauben auch Zeichenketten als Parameter, die dann vor der Eingabe ausgegeben werden.

name = raw_input("Wie heissen Sie? ") # Python-2! -> input in Python 3!
Formatierte Ausgabe
Unter Python 2 wurde das Ausrichten der Ausgabe mithilfe des Prozentzeichens durchgeführt. Beispielsweise so:
print "9 Stellen, 2 Nachkomma: %9.2f - hexadezimal: %8X" % (x, y)

Die Formatierung über das Prozentzeichen ist deprecated, soll also nicht mehr verwendet werden. Stattdessen sollte die Methode format() eingesetzt werden.

Die Methode format() wird durch einen Punkt getrennt an die Zeichenkette gehängt. Innerhalb der Formatierungszeichenkette wird durch ein geschweiftes Klammerpaar die Position der Werte angegeben. Die Werte werden als Parameter an format() übergeben.

print("Das Quadrat von {} ist {}".format(3, 9)


Homepage (C) Copyright 2014, 2015 Arnold Willemer