4: Typen

Von nun an haben Code-Boxen zwei weitere Buttons. In der Konsole öffnen und Visualisieren. Sie können dir beim Debuggen und Verstehen des Programms helfen.

Im "Hallo, Welt!"-Programm haben wir gesehen, dass Python Zeichenketten verarbeiten kann. Wir haben auch verschiedene Beispiele mit Zahlen gesehen. Zahlen und Zeichenketten unterscheiden sich extrem voneinander und es treten Fehler auf, wenn man sie durcheinander bringt:

Beispiel
Vergleich von Zeichenkette und Zahl

Wie du sehen kannst, bekommen wir eine Fehlermeldung, da die beiden Argumente von max von unterschiedlichem Typ sind. Diese Fehlermeldung ist eine gute Einführung in dieses Kapitel:

  • "Hello, World!" ist eine Zeichenkette; in Python str. Zeichenketten haben wir in Lektion 3 bereits einleitend kennengelernt; mehr dazu gibt es auch in Lektion 7A.
  • 35 ist eine Ganzzahl; in Python int. Beispiele für ganze Zahlen sind 42, -12, und 0.

Das Nutzen von Variablen mit einem falschen Typ ist eine häufige Fehlerursache in Programmen. Es ist wie der Versuch, ein Sandwich zu trinken: es ist nicht möglich, da man nur Flüssigkeiten trinken kann - und ein Sandwich ist eben nicht flüssig.

Du kannst den Typ einer Variable durch die Funktion type ermitteln.

Beispiel
Einige Beispieltypen.

(Klassen (class) sind nicht dasselbe wie Typen, aber zunächst reicht es, wenn wir das annehmen.) Das obige Beispiel zeigt, dass Zahlen in zwei verschiedene Typen aufgeteilt sind: Ganzzahlen (int) haben wir bereits kennen gelernt und Gleitpunktzahlen (manchmal auch Fließpunktzahlen genannt - Englisch: floating point numbers - float) sind zum Speichern von nicht-ganzen Zahlen (also solchen mit Nachkommastellen). Gleitpunktzahlen sind dabei nicht immer ganz exakt und eher eine Annäherung (mehr dazu in Lektion 7B). Gleitpunktzahlen und Ganzzahlen können miteinander kombiniert werden; das Ergebnis ist dann eine weitere Gleitpunktzahl.

Beispiel
Kombinieren von int und float.

Um genau zu sein: Python kombiniert nicht die Gleitpunktzahl mit der Ganzzahl, sondern wandelt die Ganzzahl in eine Gleitpunktzahl um und verrechnet zwei Gleitpunktzahlen.

Multiple-Choice-Übung: Floating
Wenn wir in obigen Beispiel 1.2 in 1.5 ändern, wie lautet dann die erste Zeile der Ausgabe?
Korrekt! Wir müssen zwei Fakten erklären, um zu sehen, warum z ausgegeben wird als 3.0.
  • Der Ausdruck x * y mischt ein int und ein float, was Python behandelt, als ob es sich um zwei floats handeln würde, und das Resultat z ist deshalb ein float.
  • Der mathematische Wert von z ist 1.5 mal 2, was 3 ergibt, aber gespeichert wird in ungenauer Dezimalform des Typs float. Wenn Python ein float ausgibt, wenn sein Wert eine Ganzzahl ist, wird er mit .0 ausgegeben, um klarzustellen, dass es sich um einen ungenauen Wert handelt.
Beachtet außerdem, dass der Wert und der Typ von y sich niemals ändern.

Oft ist es nötig, Daten von einem Typ in einen anderen umzuwandeln. So wie man ein Sandwich in eine Flüssigkeit umwandeln kann, kann man auch auch eine Typumwandlung (engl: typecast) benutzen. Damit kann man eine Zahl in eine Zeichenkette umwandeln - und umgekehrt. Dazu benutzt man den Namen des gewünschten Typs wie eine Funktion, zum Beispiel ändert

x = float("3.4")
print(x-1)
die Zeichenkette "3.4" in die Gleitpunktzahl 3.4 und gibt dann 2.4 aus. Ohne die Typumwandlung würde das Programm abstürzen, da man keine Zahl von einer Zeichenkette abziehen kann.

Manchmal erlaubt Python die Nutzung von arithmetischen Operatoren auf Zeichenketten. Der Befehl print("test" * 2) wird testtest ausgeben. Bei der Multiplikation von Zeichenketten mit einer Ganzzahl n bedeutet für Python, die Zeichenkette n-mal hintereinander zu setzen. Wir werden auch noch sehen, dass in Python auch die Addition von zwei Zeichenketten möglich ist.

Die verschiedenen Typumwandlungen verhalten sich unterschiedlich:

  • bei der Umwandlung eines float in ein int geht die Information hinter dem Dezimalpunkt verloren. Zum Beispiel wird int(1.234) zu 1, und int(-34.7) ergibt -34.
  • die Konvertierung eines str in ein int verursacht einen Fehler, wenn die Zeichenkette nicht genau nur eine Ganzzahl enthält. Zum Beispiel erzeugt int("1.234") einen Fehler.
  • die Umwandlung eines str in ein float schlägt fehl, wenn die Zeichenkette keine Zahl ist. Zum Beispiel erzeugt float("sandwich") einen Fehler.

Typumwandlungen werden häufig genutzt, um Nutzereingaben - die immer in Form einer Zeichenkette sind - zu verarbeiten. Folgendes Beispiel zeigt, wie es aussehen könnte.

Beispiel
Beispiel einer Typumwandlung.

Hier kommt noch eine abschließende Übung.

Da der Editor jetzt viele Funktionen hat, sind einige im Menü Mehr Optionen... versteckt.

Programmierübung: Leckere Typumwandlung
Schreibe ein Programm, das dir hilft, deine Freunde auf einer Party satt zu machen, indem du ein wenig mit quadratischen Pizzen rechnest. Eine Zeichenkette inputStr, die die Seitenlänge L der Pizza in cm bestimmt, ist vordefiniert. Die Fläche der Pizza kann mit A = L*L berechnet werden. Dann nehmen wir an, dass jede Person auf der Party 100 cm2 Pizza isst. Berechne die Anzahl der Personen (eine Ganzzahl), die du mit dieser Pizza vollständig satt bekommst. Hinweis

Beispiel: wenn inputStr "17.5" ist, dann ist die Fläche 306.25 cm2, so dass 3 die richtige Lösung ist.

Wenn du fertig bist, kannst du mit der nächsten Lektion weitermachen.