Variablen und Ausdrücke

Variablen

Das Konzept der Variablen ist uns bereits aus der visuellen Programmierung vertraut (siehe Abschnitt Programmieren mit Variablen). Kurz zusammengefasst, ist eine Variable ein Bezeichner, der eine Referenz, also einen Verweis auf eine Stelle im Objektspeicher von Python enthält. Im Objektspeicher sind Objekte wie die Zahl 42, der Text “Hallo Welt” oder eine Liste mit den Elementen 1, 2 und 3 abgelegt.

Definition und Zuweisung

Anders als in Scratch oder vielen anderen Programmiersprachen müssen Variablen in Python vor der Verwendung nicht definiert werden. Man weist ihnen einfach einen Wert zu, etwa:

nettobetrag = 16.80

und kann den Wert dieser Variablen anschließend für weitere Berechnungen verwenden:

bruttobetrag = nettobetrag * 1.19

Die Syntax ist hier: Bezeichner = Ausdruck, wobei der Bezeichner mit einem Buchstaben beginnen muss (bei Variablen üblicherweise ein Kleinbuchstabe) und hinter dem Gleichheitszeichen jeder beliebige Ausdruck stehen darf, der ein Ergebnis zurückliefert. Beispiele:

  • adresse = 'Musterstr. 1, 12345 Musterstadt'
  • hoechstpunktzahl = 42
  • c = math.sqrt(a**2 + b**2)
  • name = input('Bitte gib deinen Vornamen an')

Wie schon bei der visuellen Programmierung erwähnt, sollte der Bezeichner dabei möglichst aussagekräftig gewählt werden. Generische Variablenbezeichner wie “x” oder “variable” sollten möglichst vermieden werden.

Dass Variablen vor der Verwendung nicht definiert werden müssen, birgt das Risiko von Laufzeitfehlern, wenn man sich vertippt. Betrachten wir die folgenden Codebeispiele:

groesse = input('Bitte geben Sie Ihre Größe in cm ein! ')
groesse = groesse / 100
print('Sie sind ' + str(groesse) + ' m groß.')

und

groesse = input('Bitte geben Sie Ihre Größe in cm ein! ')
greosse = groesse / 100
print('Sie sind ' + str(groesse) + ' m groß.')

Wird das erste Programm gestartet, so erhalten wir die folgende Ausgabe im Konsolenfenster:

Bitte geben Sie Ihre Größe in cm ein! 203
Sie sind 2.03 m groß.

Zur Erklärung: Das Programm pausiert nach der ersten Ausgabe (“Bitte geben Sie Ihre Größe in cm ein!”) und wartet, bis wir eine Eingabe in die Konsole eingeben und mit der Eingabetaste bestätigen. In diesem Fall haben wir die Zahl 203 eingegeben.

Wird anschließend das zweite Programm ausgeführt, erzeugt es die folgende Ausgabe in der Konsolenfenster (auch hier geben wir wieder 203 ein):

Bitte geben Sie Ihre Größe in cm ein! 203
Sie sind 203 m groß.

Was ist passiert? Das zweite Programm enthält in Zeile 2 einen Tippfehler: Statt groesse steht dort greosse. Der Python-Interpreter legt darum eine neue Variable namens greosse an und speichert darin den Wert 2.03. Der Wert von groesse bleibt unverändert.

Datentypen

Nicht mit allen Arten von Daten lassen sich die gleichen Operationen durchführen. Betrachten wir als Beispiel den Operator *:

>>> 6 * 7
42
>>> 4 * 3.141592653587
12.566370614348
>>> 'kartoffel' * 'salat'
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'str'
>>> 2 * 'moin '
'moin moin '
>>> 2.5 * 'moin'
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'float'
>>> 4 * [1,2,3]
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

Mit dem *-Operator können Zahlen multipliziert und Zeichenketten vervielfältigt werden. Hier gibt es Unterschiede bezüglich der Datentypen der Operanden (d. h. der Werte bzw. Ausdrücke, die links und rechts des Operators stehen).

Die wichtigsten elementaren Datentypen in Python sind:

TypErklärungBeispiele
intfür ganze Zahlen (engl. integer numbers)0, 42, 3190701205
floatfür Dezimalzahlen (“Kommazahlen”, engl. floating-point numbers)0.5, 42.0, 3.141592
strfür beliebige Zeichenketten (engl. strings)'Hello World', '42', 'https://iqsh.landsh.de'
boolfür Wahrheitswerte (engl. boolean)1True, False
Anmerkung: Datentyp abfragen

Konvertierung von Datentypen

Mit den Funktionen int, float, str und bool können Objekte in andere Datentypen umgewandelt (“konvertiert”) werden. Das wird als Type Casting bezeichnet (auf deutsch “Datentypumwandlung” oder kurz “Konvertierung”). Dabei können Daten verloren gehen, und es sind nicht alle Konvertierungen möglich. Zum Beispiel gehen bei der Konvertierung int(25.95) zwangsläufig die Nachkommastellen verloren, das Ergebnis ist die Ganzzahl 25.2

Die folgende Tabelle zeigt anhand von Beispielen, welche Konvertierungen zwischen den vier elementaren Datentypen möglich sind und welche Ergebnisse wir erhalten:

Argumentwertint(x)float(x)str(x)bool(x)
x = 222.0'2'True
x = 2.781822.7818'2.7818'True
x = 'zwei'FehlerFehler'zwei'True
x = True11.0'True'True

Hinweis: Die Konvertierung von Zahlen oder Strings in Wahrheitswerte mit bool ergibt immer True, außer für die Werte 0, 0.0 und den leeren String ''.

Operatoren

Mathematische Operatoren

Mathematische Operatoren werden für Berechnungen mit numerischen Werten (Datentypen int und float) verwendet. Die Operanden (hier x und y genannt) sind numerische Werte oder Ausdrücke, die numerische Werte ergeben. Die Berechnungsergebnisse sind ebenfalls numerische Werte.

OperatorBezeichnungBeschreibungin Scratch
x + yAdditionScratch +
x - ySubtraktionScratch -
x * yMultiplikationScratch *
x / yDivisionLiefert immer einen Wert vom Datentyp float als Ergebnis zurück, auch wenn das Ergebnis ganzzahlig ist.
Beispiel: 4 / 22.0
Scratch /
x // yGanzzahlige DivisionLiefert immer einen Wert vom Datentyp int zurück, ggf. wird das Ergebnis also konvertiert.
Beispiel: x // y ergibt dasselbe wie int(x / y)
Scratch //
x % yModuloBerechnet den Rest, der bei der ganzzahligen Division von x durch y übrigbleibt.
Beispiel: 10 % 31
Scratch %
x ** yPotenzBerechnet xy (“x hoch y”), also die y-fache Multiplikation von x.siehe unten3

Vergleichsoperatoren

Mit Vergleichsoperatoren können zwei Werte oder die Ergebnisse zweier Ausdrücke verglichen werden. Das Ergebnis ist ein Wahrheitswert True oder False (Ausdrücke mit einem Vergleichsoperatoren sind also logische Ausdrücke).

Die Operanden können dabei verschiedene Datentypen haben, so lassen sich numerische Werte, Zeichenketten und auch andere Objekte miteinander vergleichen. In den folgenden Beispielen stehen x und y also für Werte beliebiger Datentypen (z. B. int, float oder str).

OperatorBezeichnungHinweisin Scratch
x == yGleichheitAchtung: In Python wird ein doppeltes Gleichheitszeichen zur Überprüfung der Gleichheit verwendet. Ein einfaches Gleichheitszeichen beschreibt dagegen eine Variablenzuweisung!Scratch ==
x != yUngleichheitScratch !=
x < yEcht kleinerScratch <
x <= yKleiner oder gleichScratch <=
x > yEcht größerScratch >
x >= yGrößer oder gleichScratch >=

Logische Operatoren

Logische Operatoren werden für Berechnungen mit Wahrheitswerten (Datentyp bool) verwendet, z. B. um mehrere Wahrheitswerte oder logische Ausdrücke zu verknüpfen. Das Berechnungsergebnis ist ebenfalls ein Wahrheitswert. In den folgenden Beispielen stehen a und b jeweils für Wahrheitswerte oder logische Ausdrücke.

OperatorBeschreibungin Scratch
not aLogisches NICHT (“Negation”): not a ist genau dann True, wenn a zu False ausgewertet wird.Scratch >
a and bLogisches UND: a and b ist genau dann True, wenn sowohl a als auch b zu True ausgewertet werden.Scratch
a or bLogisches ODER: a and b ist genau dann True, wenn a, b oder beide zu True ausgewertet werden.Scratch
Exkurs: Fortgeschrittenere Verwendung von logischen Operatoren

Operatoren für Zeichenketten

Die folgenden Operatoren sind zum Arbeiten mit Zeichenketten (Datentyp str) hilfreich. In der Regel ist der Ergebniswert ebenfalls eine Zeichenkette (Ausnahme: Für den Operator in ist das Ergebnis ein Wahrheitswert). In den folgenden Beispielen stehen s und t jeweils für Zeichenketten und n für eine ganze Zahl.

OperationBedeutungin Scratch
s + tAneinanderhängen (“Konkatenation”)
Beispiel: 'Flens' + 'burg''Flensburg'
Scratch >
n * sVervielfältigung
Beispiel: 3 * 'Ho''HoHoHo'
s in tIst der Teilstring t in s enthalten?
Beispiel: 'sum' in 'Husum'True
Scratch >
s[n]Zeichen an der Position n im String s
Beispiel: 'Rendsburg'[1]'e'
Achtung: In Python wird von 0 an gezählt, in Scratch von 1 an!
Scratch >
len(s)Länge des Strings s
Beispiel: len('Kiel')4
Scratch >

  1. Logische Wahrheitswerte werden nach George Boole, einem Pionier der mathematischen Logik, auch als “boolesche Werte” bezeichnet (im Englischen “boolean”). ↩︎

  2. Bei der Umwandlung von Dezimalzahlen mit Nachkommastellen in Ganzzahlen mit der Funktion int wird in Python zur Null hin gerundet (bei positiven Zahlen wird also abgerundet, bei negativen aufgerundet). ↩︎

  3. Es gibt für die Potenz mit beliebiger Basis keinen Block in Scratch, aber mit Hilfe der Exponentialfunktion und des natürlichen Logarithmus lässt sich die Potenz folgendermaßen umformen: \(x^y = \mathrm{e}^{y\cdot\ln(x)}\) und in Scratch umsetzen: Scratch ** ↩︎