Zum Inhalt

Arbeiten mit Zahlen

In der Programmiersprache Python werden Zahlen in Ganzzahlen (int) und in Kommazahlen (float) unterschieden. Der Grund warum in Programmen zwischen Ganzzahlen und Kommazahlen unterschieden wird, liegt in der Repräsentation von Zahlenwerten in Rechnern. Eine Zahl hat dabei immer ein Vorzeichen, falls explizit kein Vorzeichen angegeben wird, wird implizit + für eine positive Zahl angenommen. Beispiele für Ganzzahlen sind -20, 0, oder 834. Beispiele für Kommazahlen sind -2.5, 0.0, oder 25.235230.

Arithmetische Operationen

Zahlen können über arithmetische Operationen in Ausdrücken verknüpft werden um Berechnungen durchzuführen. Python unterstützt unterschiedliche arithmetische Operationen. In der folgenden Tabelle finden sich wichtige Operationen mit dem Operator Symbol und Beispielen:

Operator Bezeichnung Beispiel Ergebnis
+ Addition 12 + 21 33
- Subtraktion 55 - 30 25
* Multiplikation 5 * 5 25
** Potenzieren 10 ** 3 1000
/ Division 9 / 4 2.25
// Division mit Abrunden 9 // 4 2
% Modulo 9 % 4 1

Verständnisfrage

Verwenden Sie eine online Programmierumgebung oder die Python Repl und versuchen Sie einige der Operationen aus. Versuchen Sie auch mehrere Operationen innerhalb eines Ausdrucks zu verknüpfen, wie zum Beispiel 10 ** 2 + 5. Überlegen Sie ob die Reihenfolge der Ausführung der Operationen für Sie Sinn macht?

Operatorrangfolge (Precedence)

Wenn mehrere Operationen kombiniert in einem Ausdruck verwendet werden, gibt es eine Rangfolge in der Ausführung. Aus der Grundschule ist vielleicht der Merksatz KlaPuStri oder PEMDAS bekannt. Ein ähnliches Konzept gilt auch für Programmiersprachen. Konkret bedeutet das beispielsweise, dass in einem Ausdruck mit Multiplikation und Addition, die Multiplikation vor der Addition ausgeführt wird. Der Ausdruck 11 + 5 * 3 würde demnach 26 und nicht 48 ergeben, da die Multiplikation Vorrang vor der Addition hat.

Innerhalb einer Programmiersprache gibt es eine Vielzahl von Operatoren (jedenfalls viel mehr als der PEMDAS Merksatz angibt). Die Operatoren werden in Gruppen mit gleicher Rangfolge zusammengefasst. Zum Beispiel hat die Addition und die Substraktion die gleiche Reihenfolge in Python. Falls nun Operationen mit gleicher Rangfolge in einem Ausdruck aufeinandertreffen wird die Ausführung von links nach rechts abgearbeitet. In der folgenden Tabelle ist ein Auszug der Rangfolge der arithmetischen Operationen aufgeführt. Eine vollständige Übersicht über alle Operatoren findet sich in der Python Dokumentation.

Operator Bezeichnung Rangfolge
** Potenzieren 1
- Negation 2
*, /, //, % Multiplikation, Division, Division mit Abrunden, Modulo 3
+, - Addition, Subtraktion 4

Ähnlich zur Mathematik kann in einem Ausdruck durch Klammerung die Operatorrangfolge beeinflusst werden. Klammern werden dabei immer zuerst ausgewertet. Etwas komplizierter kann es werden, wenn Klammern ineinander verschachtelt werden. Bei Verschachtelungen werden Klammern immer von innen nach außen ausgewertet.

((5 + 10) * 8) + 5 # = 125 

Verständnisfrage

Gehen Sie folgende Beispiele nacheinander durch und überlegen Sie, durch welche Operatorreihenfolge das Ergebnis zustande kommt:

 10 +  20  *  30  / 10   # = 70
(10 +  20) *  30  / 10   # = 90
 10 + (20  *  30) / 10   # = 70
(10 +  20  *  30) / 10   # = 61
 10 +  20  * (30  / 10)  # = 70

Wissenschaftliche Notation

Die wissenschaftliche Notation ist eine kompakte Form der Zahlendarstellung, welcher man in Programmiersprachen öfters begegnet. Diese Darstellung besteht aus einer Mantisse und einem Exponent zur Basis 10.

Als Beispiel kann die Zahl 8000000 als 8e6 dargestellt werden. Dabei ist 8 die Mantisse und 6 der Exponent, sprich 8 Mal 10 Hoch 6. Mit einem negativen Exponenten kann man Kommazahlen mit vielen Nullen nach dem Komma kompakt darstellen. Zum Beispiel kann 0.0000008 als 8e-7 repräsentiert werden, sprich 8 Mal 10 Hoch Minus 7. Eine Zahl, welche in der wiss. Notation dargestellt ist, entspricht immer dem Datentyp float.

int vs float

In Programmiersprachen wird zwischen Ganzzahlen (int) und Kommazahlen (float) unterschieden. Diese Unterscheidung kommt daher, dass im Rechner Ganzzahlen und Kommazahlen unterschiedlich repräsentiert werden.

int

Mit dem Datentyp int werden Ganzzahlen repräsentiert, wie zum Beispiel 0, -10 oder 8123242323532532423432. Generell gibt es keine Beschränkung in der Länge der Ganzzahl in Python, solange sich die Zahl im Hauptspeicher des Rechners abbilden lässt.

float

Mit dem Datentyp float werden Kommazahlen repräsentiert, wie zum Beispiel 0.0, -10.343 oder 12.8123242323532532423432. Ein float ist dabei immer eine Annäherung an eine reele Zahl, da in einem Rechner keine "unendliche" Genauigkeit für reele Zahlen vorherrschen kann. Kommazahlen werden in Rechnern über den IEEE 754 Standard repräsentiert, deshalb werden sie als Gleitkommazahlen aka float bezeichnet.

Innerhalb dieser Lehrveranstaltung werden die Details zum IEEE 754 Standard nicht weiter vertieft. Es ist jedoch wichtig zu verstehen, dass es durch die eingeschränkte Genauigkeit zu "Rundungsfehlern" im Kommabereich kommen kann. Im folgenden Pyhton Programm wird dies ersichtlich:

0.1 + 0.2 # = 0.30000000000000004

Repräsentation von Geldbeträgen

Für viele numerische Berechnungen oder auch im Machine Learning können diese Rundungsfehler vernachlässigt werden. Jedoch wenn Sie in Programmen mit Geldbeträgen rechnen, sollte dies beachtet werden. Leider finden sich immer noch Onlineshops in denen im Cent-Bereich falsche Beträge errechnet werden. Falls, mit Geldbeträgen gerechnet wird, sollte man deshalb den Betrag vor und nach dem Komma jeweils mit einer Ganzzahl repräsentieren. Python bietet dazu den speziellen Datentyp Decimal.

Fehler in Programmen

Programme können Fehler aufweisen. Dies ist etwas ganz normales und in umfangreichen Programmen kann diesem Umstand durch eine umfassende Teststrategie begegnet werden. Im weiteren Verlauf dieser Lehrveranstaltung wird auch das Konzept des Exception Handlings eingeführt. Dies ist eine Programmiertechnik um im Fehlerfall eines Programms, einen alternativen Programmablauf durchzuführen.

Fehler in der Syntax

Ein häufiger Fehler in Programmen, vorrallem bei Programmieranfänger:innen, ist ein sog. Syntaxfehler. Dieser Fehler entsteht, wenn ein Ausdruck fehlerhaft formuliert wurde. (zB eine Klammer wird nicht korrekt geschlossen). Beispielsweise enthält der folgende Ausdruck eine falsche Klammersetzung:

3 + 5 ) * 2

Die Ausführung dieses Programms würde mit einer Fehlermeldung enden, welche ähnlich zu folgender Ausgabe aussieht:

    3 + 5 ) * 2
          ^
SyntaxError: unmatched ')'

Der Python Interpreter kann natürlich nur korrekte Programme ausführen. Im Quellcode muss der Fehler ausgebessert werden, sodass die Ausführung korrekt durchgeführt werden kann.

Fehler in der Semantik

Fehler in der sog. Semantik können auftreten, wenn ein Programm etwas machen soll, dass "keinen Sinn ergibt". Ein Beispiel für einen semantischen Fehler wäre die Division durch 0. Der folgende Ausdruck würde eine Divsion durch 0 enthalten:

55.4 / 0

Die Ausführung dieses Programms würde mit einer Fehlermeldung enden, welche ähnlich zu folgender Ausgabe aussieht:

ZeroDivisionError: float division by zero

Kommentare im Quellcode

Kommentare sind ein nützliches Hilfsmittel und geben Entwickler:innen die Möglichkeit, eine natürlichsprachliche und ergänzende Dokumentation, im Quellcode einzufügen. Kommentare werden bei der Ausführung des Programms vom Interpreter gänzlich ignoriert. Programmiersprachen nutzen spezielle Sonderzeichen um einen Kommentar im Quellcode auszuzeichnen. Python nutzt die Raute #. Andere Programmiersprachen wie Java oder JavaScript nutzen Slashes // oder Slash-Stern Kombinationen /* */.

In Python kann ein Kommentar eine ganze Zeile umfassen oder ans Ende einer Zeile gesetzt werden:

# Python Kommentare:

# Kommentar für die ganze Zeile
a = 3  # Kommentar am Ende der Zeile

Die print Funktion

Die Funktion print ist eine Built-in Funktion in Python. Mit dieser Funktion können beliebige Nachrichten auf der Kommandozeile ausgegeben werden. Wenn Sie das folgende Programm ausführen würde die Zeichenkette 123 ausgegeben:

print(123)  # 123