Vorlesungsskript 09

Ausdrücke für Zahlen

Alles, was von Python in ein Objekt (also, grob gesagt, eine Folge von Nullen und Einsen im Arbeitsspeicher) übersetzt wird, ist ein Ausdruck (engl. expression). Für diesen Prozess des „Übersetzens“ sagt man auch, dass ein Ausdruck zu einem Objekt ausgewertet wird (engl. to evaluate) oder dass der Ausdruck ein Objekt zurückgibt (engl. to return).

Bisher kennen Sie zwei Arten von Ausdrücken: Literale und Variablenausdrücke. Ein Literal beschreibt das Objekt, das es zurückgibt, vollständig, daher ist es mit Literalen möglich, Objekte „aus dem Nichts“ zu erzeugen. Variablenausdrücke dagegen funktionieren nur, wenn unter dem jeweiligen Variablennamen bereits zuvor ein Objekt gespeichert wurde – sie geben dann dasselbe Objekt zurück.

Wenn Sie im interaktiven Modus einen Ausdruck eingeben, zeigt Python das Objekt, das dieser Ausdruck zurückgibt, als Output an, bevor das nächste Prompt angezeigt wird. Es sei denn, der Ausdruck gibt None zurück! Dann zeigt Python keinen Output an und es kommt sofort das nächste Prompt:

>>> 1
1
>>> a = 1
>>> a
1
>>> None
>>>

Daneben gibt es auch Ausdrücke, die ein oder mehrere Objekte als Input nehmen und aus diesen Objekten ein neues Objekt erzeugen und zurückgeben. Ein einfaches Beispiel ist der Additionsausdruck 1 + 2. Er nimmt zwei Objekte als Input, nämlich die int-Objekte 1 und 2, und gibt ein neues Objekt zurück, nämlich das int-Objekt 3. Um solche und andere Ausdrückge geht es im Folgenden.

Arithmetische Operatorenausdrücke

Ein Operatorenausdruck besteht normalerweise aus zwei Ausdrücken (den Operanden) und einem Symbol, dem Operator, der dazwischen steht. Ein klassisches Beispiel sind arithmetische Operatorenausdrücke, die auf Zahlen, also Objekten der Typen int und float, operieren. Sie werden von Python ausgerechnet und zum Ergebnis der Rechnung ausgewertet. Hier die wichtigsten Typen von arithmetischen Operatorenausdrücken. Wir verwenden die Variablen a und b als Beispiele für die Operanden; natürlich könnten dort auch andere Ausdrücke wie z.B. Literale stehen.

Ausdruck Gibt zurück
a + b Summe von a und b
a - b Differenz von a und b
a * b Produkt von a und b
a / b Quotient von a und b
a // b Ganzzahlquotient von a und b
a % b Rest der Ganzzahldivision von a durch b
a ** b b-te Potenz von b
-a Gegenzahl von a (dieser Operator hat nur einen Operanden)

Die folgende interaktive Session demonstriert es:

>>> 1 + 2
3
>>> 2 - 1
1
>>> 1 - 2
-1
>>> 2 * 3
6
>>> 3 / 2
1.5
>>> 3 // 2
1
>>> 3 % 2
1
>>> 2 ** 3
8
>>> a = 1
>>> -a
-1

Operatorenpräzedenz und Klammern

Natürlich lassen sich auch komplexe arithmetische Ausdrücke bauen, die wiederum arithmetische Ausdrücke als Operanden haben. Wie aus der Arithmetik gewohnt gilt auch in Python: Potenz vor Punkt vor Strich, ansonsten müssen Sie runde Klammern verwenden.

>>> 2 + 3 * 4
14
>>> (2 + 3) * 4
20

Vergleichende Operatorenausdrücke

Mit Vergleichsoperatoren können Sie Zahlen vergleichen. Vergleichende Operatorenausdrücke geben Objekte vom Typ bool zurück, also True oder False. Hier eine Übersicht:

Ausdruck Gibt True zurück, wenn…
a == b …die Zahlen a und b gleich groß sind.
a != b …die Zahlen a und b verschieden sind.
a > b …die Zahl a größer als die Zahl b ist.
a < b …die Zahl a kleiner als die Zahl b ist.
a >= b …die Zahl a größer oder gleich der Zahl b ist.
a <= b …die Zahl a kleiner oder gleich der Zahl b ist.

Verwechseln Sie nicht = und ==! Nur mit dem doppelten Gleichheitszeichen können Sie vergleichen, das einfache ist für Variablenzuweisungen.

Zur Demonstration:

>>> 2 == 2
True
>>> 2.0 == 2
True
>>> 1 == 2
False
>>> 2 != 2
False
>>> 1 != 2
True
>>> 2 > 1
True
>>> 2 > 1.5
True
>>> 2 > 0
True
>>> 2 > -2
True
>>> 2 > 2
False
>>> 1 > 2
False
>>> 1 < 2
True
>>> 2 >= 1
True
>>> 2 >= 2
True
>>> 1 <= 2
True
>>> 2 <= 2
True

Funktionsaufrufe

Ein weiterer wichtiger Typ von Ausdruck ist der Funktionsaufruf (engl. function call). Hiermit kann man z.B. Berechnungen durchführen, für die keine Operatoren zur Verfügung stehen.

Voraussetzung für einen Funktionsaufruf ist, dass eine entsprechende Funktion definiert ist. Was Funktionen beim Programmieren genau sind und wie man seine eigenen Funktionen definiert, lernen wir später. Hier schauen wir uns erstmal einige eingebaute Funktionen (engl. built-in functions) an, also Funktionen, die in Python vordefiniert sind und die man also ohne weiteres aufrufen kann.

So, wie innerhalb von Operatorenausdrücken weitere Ausdrücke vorkommen – die Operanden – können innerhalb von Funktionsaufrufen weitere Ausdrücke vorkommen – die Argumente. Die Argumente bilden den Input einer Funktion, und u.a. von den Argumenten hängt ab, was der Funktionsausdruck zurückgibt (ganz ähnlich wie bei Kommandozeilenprogrammen und ihren Argumenten).

Ein Funktionsaufruf besteht aus dem Namen einer Funktion, gefolgt von einem Paar runder Klammern. Innerhalb der runden Klammern befinden sich, durch Kommata getrennt, die Argumente. Hier die Übersicht über einige eingebaute Funktionen, die etwas mit Zahlen zu tun haben:

Funktionsaufruf Gibt zurück
abs(a) Betrag der Zahl a
float(a) a, konvertiert zu einer Gleitkommazahl (Typ float)
int(a) a, konvertiert zu einer Ganzzahl (Typ int)
max(a, b, …) das größte unter den Argumenten
min(a, b, …) das kleinste unter den Argumenten
bin(a) die Ganzzahl a in Binärschreibweise (als str)
hex(a) die Ganzzahl a in Hexadezimalschreibweise (als str)
oct(a) die Ganzzahl a in Oktalschreibweise (als str)
round(number) Ergebnis der mathematischen Rundung der Zahl number auf Ganzzahlen als int
round(number, digits) Ergebnis der mathematischen Rundung der Zahl number als float; digits gibt die Anzahl der beizubehaltenden Nachkommastellen an; ist digits negativ, wird auf Vielfache von 10 gerundet

Zur Demonstration:

>>> abs(2)
2
>>> abs(-2)
2
>>> float(2)
2.0
>>> float('2.5')
2.5
>>> int(2.5)
2
>>> int('2')
2
>>> max(42, -2, 1)
42
>>> min(42, -2, 1)
-2
>>> bin(42)
'0b101010'
>>> hex(42)
'0x2a'
>>> oct(42)
'0o52'
>>> round(2.5)
2
>>> round(2.51)
3
>>> round(3.1415, 2)
3.14
>>> round(3.1415, 0)
3.0
>>> round(42, -1)
40