Hast du schon mal vom sogenannten Python Type Casting gehört? Falls nicht oder du bereits von diesem Thema gehört, es aber noch nicht so ganz verstanden hast, bist du bei unserem heutigen Blogartikel genau richtig. Bei der Verwendung der input()-Funktion, die wir bereits im letzten Beitrag kennengelernt haben, gibt es noch einen ziemlich fiesen Stolperstein, der uns im Weg steht.
Um diesen Stolperstein zu umgehen, stehen uns in Python Type-Casting-Funktionen zur Verfügung, die wir in den folgenden Zeilen genauer kennenlernen werden.
Inhaltsverzeichnis
1. Problemstellung - Warum benötigt man die Python Type Casting Funktionen?
Um in das Thema langsam einzusteigen, beginnen wir erst einmal mit einem Beispiel. Dafür schreiben wir uns ein Addierer-Programm, das zwei Zahlen des Nutzers entgegennimmt, diese miteinander addiert und anschließend auf der Konsole ausgibt. Beginnen wir also zunächst einmal mit der input()-Funktion, um die Zahlen entgegenzunehmen. Dieser geben wir einen Text mit, um dem Nutzer zu signalisieren, was er in unser Programm eingeben soll:
Da wir den eingegebenen Wert vom Nutzer noch für unsere Addition verwenden möchten, speichern wir ihn in einer Variable:
Um noch den zweiten Wert für unsere Addition zu erhalten, lassen wir den Nutzer also noch eine weitere Zahl in unser Programm eingeben:
An dieser Stelle können wir prüfen, ob die beiden Zahlen entgegengenommen wurden, indem wir sie uns einmal vorab ausgeben lassen:
Wie wir nun in der Ausgabe erkennen können, wurden die Zahlen 1 und 3, die ich beispielhaft eingegeben habe, korrekt eingelesen:
Nun müssen wir die Zahlen noch miteinander addieren, was sich relativ leicht umsetzen lässt.
Wenn wir nun das Programm starten und testweise wieder die Werte 1 und 3 eingeben, stellen wir merkwürdigerweise fest, dass wir in der Ausgabe die Zahl 13 erhalten:
Hätte unser Programm die Zahlen miteinander addiert, dann wäre das Ergebnis nicht 13 gewesen, sondern 4. Versuchen wir es am besten noch einmal mit einem zweiten Anlauf und anderen Zahlen, um möglicherweise Muster zu erkennen:
Nun erhalten wir anstelle des erwarteten Ergebnisses 8, die Zahl 35. Aber woran liegt das? Der Grund für unser Ergebnis ist, dass die Zahlen miteinander verkettet wurden. In einem der vorherigen Blogbeiträge haben wir bereits die drei Datentypen int, float und str kennengelernt. Bis zu diesem Zeitpunkt haben wir uns allerdings noch keine Gedanken darüber gemacht, welche Datentypen die Werte haben, die wir durch die input()-Funktion einlesen. Um das herauszufinden, können wir uns mit der sogenannten type-Funktion behelfen.
2. Die type-Funktion in Python
Mithilfe der type-Funktion können wir in Python ermitteln, welcher Datentyp einem Wert zugrunde liegt, den wir an diese Funktion übergeben. Das klingt im ersten Moment zwar kompliziert, ist aber tatsächlich ziemlich einfach. Sehen wir uns das Ganze mal in einem Praxisbeispiel an. Um die type-Funktion aufzurufen, schreiben wir das Wort „type“ und hängen diesem anschließend runde Klammern an:
Nun müssen wir unserer type-Funktion noch einen Wert mitgeben, für welchen sie den Datentyp ermitteln soll. Für unser Beispiel nehmen wir dafür zunächst value1. Den Wert, der dabei herauskommt, fangen wir mit einer Variable auf und lassen diese anschließend ausgeben:
Führen wir das Programm nun aus, sehen wir den zugrunde liegenden Datentyp des Wertes, der sich in der Variable value1 befindet. Nämlich der Typ str, also ein String:
An dieser Stelle sehen wir, dass die input()-Funktion zwar einen beliebigen Wert entgegennehmen kann, dieser Wert jedoch intern immer als Datentyp String gespeichert wird. Wie wir an unserem Beispiel und der type-Funktion erkennen konnten, werden also selbst Zahlen, die wir einlesen, als Strings gespeichert.
Nun ist auch klar, weshalb unsere Zahlen nicht miteinander addiert, sondern verkettet wurden. Weil wir vor und nach dem +-Operator keinen Wert vom Typ int oder float hatten, sondern jeweils einen Wert vom Typ String. Noch einmal kurz zur Wiederholung: Strings werden durch den +-Operator miteinander verkettet, das heißt auf unser Beispiel bezogen, dass die Zahl rechts vom Operator an die Zahl links des Operators angehängt wird.
Den Beweis hierfür sehen wir nochmals am nachfolgenden Beispiel:
Da wir das Problem nun identifiziert haben, müssen wir dieses nur noch beheben. An dieser Stelle kommt für uns in Python Type Casting ins Spiel.
3. Das Python Type Casting
Mithilfe spezieller Funktionen können wir den Datentyp eines Wertes in einen anderen Datentyp umwandeln. Diesen Prozess nennt man in Python Type Casting.
Für die Umwandlung in die Datentypen integer, float und String existieren jeweils eigene Funktionen.
Aktuell werden in unserem Beispiel die vom Nutzer eingelesenen Zahlen als Strings gespeichert, weil das standardmäßig von der input()-Funktion auf diese Weise gehandhabt wird.
Nun können wir vor der Durchführung der Addition die beiden eingelesenen Werte in Integer Zahlen umwandeln. Dafür rufen wir vor value1 die Integer Type-Casting-Funktion auf, in dem wir das Wort „int“ schreiben und „value1“ zwischen die darauffolgenden Klammern setzen. Genauso setzen wir das ebenfalls bei value2 um:
Mithilfe dieser Funktion werden an dieser Stelle beide Werte in den Datentyp integer umgewandelt, noch bevor sie miteinander addiert werden. Lesen wir nun also die Zahlen 1 und 4 ein, werden diese zwar wieder als Strings in den Variablen value1 und value2 gespeichert, allerdings wandelt der Computer sie vor der Ausgabe in integer um. So weiß er, dass er die beiden Zahlen, die nun vom Typ int sind, aufgrund des +-Operators miteinander addieren muss. Und wie wir sehen können, erhalten wir nun das tatsächlich erwartete Ergebnis:
An welcher Stelle du das Type Casting durchführst, bleibt dir überlassen und hängt vom konkreten Anwendungsfall ab. Durch das Type Casting, das wir gerade in unserem Beispiel umgesetzt haben, bleiben die Werte der Variablen nach wie vor als Strings gespeichert. Sie werden lediglich kurz bei der Addition umgewandelt, damit diese korrekt durchgeführt werden kann.
Wichtig: Sollten wir direkt im Anschluss eine weitere Addition innerhalb einer zweiten print-Funktion ohne das Type Casting durchführen, würden die Werte von value1 und value2 wieder miteinander verkettet werden.
Das Type Casting kann auch durchgeführt werden, bevor die Werte der input()-Funktion an die entsprechenden Variablen zugewiesen werden:
So werden sie direkt mit dem korrekten Datentyp in der Variable gespeichert und müssen folglich nicht mehr bei der Addition umgewandelt werden.
Da wir die type-Funktion für integer verwenden, funktioniert unser Programm logischerweise ausschließlich für Ganzzahlen. Übergeben wir hier nun beispielsweise eine Kommazahl, wie etwa die 3,1, kommt es zu einer Fehlermeldung. Der Grund dafür liegt darin, dass Gleitkommazahlenwerte nicht in Integer konvertiert werden können, da Integer nur Ganzzahlen fassen können.
Wenn wir nun also möchten, dass unser Programm sowohl mit Gleitkomma- als auch mit Ganzzahlen arbeiten kann, konvertieren wir die beiden eingelesenen Werte einfach direkt in den Datentyp float. Umgesetzt wird das mit der Type-Casting-Funktion float, die die eingelesenen Strings in den Datentyp float konvertiert:
Wie du siehst, ist das Type Casting in Python ziemlich nützlich und auch gar nicht so schwierig anzuwenden. Nun sind wir auch schon am Ende des heutigen Blogbeitrags angekommen.
An dieser Stelle hast du das nötige Wissen, um in Python Type-Casting-Funktionen auch bei deinen eigenen Projekten umzusetzen.