Teil 3: Datentypen

Lernziele
  • Die vier Grundtypen int, float, str und bool unterscheiden
  • Den Typ eines Werts mit type bestimmen
  • Werte mit int, float und str in andere Typen umwandeln
  • Erklären, warum sich nicht alle Typen miteinander verrechnen lassen
  • Eingaben mit int oder float umwandeln, um damit zu rechnen

Neue Befehle und Werte:

  • type() gibt den Typ eines Werts zurück
  • int() wandelt in eine ganze Zahl um
  • float() wandelt in eine Kommazahl um
  • str() wandelt in eine Zeichenkette um
  • True und False sind die beiden Wahrheitswerte

Datentypen

Jeder Wert in Python hat einen Typ. Der Typ bestimmt, welche Werte möglich sind und welche Operationen erlaubt sind.

Die vier Grundtypen
intganze Zahlen55, −3-3, 20262026 (von engl. integer)
floatZahlen mit Nachkommastellen3.143.14, −0.02-0.02 (Punkt statt Komma)
strZeichenketten"Hallo" (von engl. string, in Anführungszeichen)
boolWahrheitswerteTrue, False (nur diese zwei, gross geschrieben)

Mit type finden wir den Typ eines Werts heraus:

print(type(3))
print(type(2.7))
print(type("Hallo"))
print(type(True))

Typen lassen sich nicht beliebig mischen

Nicht jede Operation ist mit jedem Typ möglich. Das folgende Programm stürzt ab:

zahl = 10
text = "Guten Morgen"
print(zahl + text)

Python weiss nicht, was dabei herauskommen soll, eine Zahl oder ein Text. Damit es funktioniert, wandeln wir die Zahl zuerst in eine Zeichenkette um:

zahl = 10
text = "Guten Morgen"
print(str(zahl) + text)
Umwandeln zwischen Typen

str(x) macht aus x eine Zeichenkette. Das klappt immer.

int(x) macht daraus eine ganze Zahl. Bei einem float wird zur Null hin abgeschnitten, bei einem String muss dieser eine gültige ganze Zahl enthalten.

float(x) macht daraus eine Kommazahl.

Klappt eine Umwandlung nicht, gibt es einen Fehler, zum Beispiel bei int("Hallo").

Eingaben umwandeln

input liefert das Eingetippte als Zeichenkette zurück, auch wenn es wie eine Zahl aussieht. Das folgende Programm stürzt deshalb ab:

alter = input("Wie alt bist du? ")
print(alter + 1)

Python soll hier die Zeichenkette "15" mit der Zahl 1 addieren, und das geht nicht. Wir wandeln die Eingabe zuerst um:

alter = int(input("Wie alt bist du? "))
print(alter + 1)
Wie alt bist du? 15
16
Eingaben einlesen

Die Umwandlung schreibt man direkt um das input herum:

zahl = int(input("Gib eine ganze Zahl ein: "))
preis = float(input("Gib einen Preis ein: "))

Für Text brauchst du nichts umzuwandeln, dort genügt name = input("Name: ").

WebTigerPython ist grosszügig, die Prüfung nicht

In WebTigerPython läuft oft auch alter = input("Wie alt bist du? ") und danach alter + 1, weil die Umgebung die Eingabe von sich aus in eine Zahl verwandelt. Verlass dich nicht darauf. In gewöhnlichem Python und in unserer Prüfungsumgebung exam.net gibt es an dieser Stelle einen TypeError. Schreibe die Umwandlung mit int oder float deshalb immer selbst hin.

Aufgaben

Aufgabe 3.1

Bestimme für jeden Ausdruck den Typ des Ergebnisses, zuerst im Kopf, dann mit type.

PythonLoading editor…
3 + 4
3 + 4.0
"3" + "4"
3 * "ab"
10 / 2
Aufgabe 3.2

Wir können Zahlen nicht mit Text addieren. Finde durch Ausprobieren heraus, welche Kombinationen von int, float und str sich mit + verbinden lassen und welchen Typ das Ergebnis hat. Halte deine Ergebnisse in einer Tabelle fest.

Was haben sich die Entwickler von Python wohl dabei überlegt?

PythonLoading editor…
Aufgabe 3.3

Untersuche die Funktion int. Was passiert, wenn der String

  • (a) eine negative Zahl enthält ("-2"),
  • (b) Leerzeichen enthält (" 2 " und "2 0"),
  • (c) eine Kommazahl enthält ("2.0"),
  • (d) gar keine Zahl ist ("Hallo")?

Und was passiert bei int(3.8) bzw. int(-2.8)?

PythonLoading editor…
Aufgabe 3.4

Schreibe ein Programm, das mit input() zwei Zahlen einliest und ihre Summe ausgibt. Denk an die Umwandlung.

PythonLoading editor…

Weitere Aufgaben

Zusatzaufgabe 3.5

Berechne im Kopf, was 0.1 + 0.2 ergibt. Lass es dann Python ausrechnen. Recherchiere, woher der Unterschied kommt.

PythonLoading editor…
Zusatzaufgabe 3.6

Vergleiche die beiden Summen. Sind sie gleich? Überlege dir, woher ein Unterschied kommen könnte.

PythonLoading editor…
print(0.0000000000000001 + 0.0000000000000001 + 1.0)
print(1.0 + 0.0000000000000001 + 0.0000000000000001)
Zusatzaufgabe 3.7

Gibt es neben int, float, str und bool noch weitere Typen? Tipp: Überlege dir, worauf du type sonst noch anwenden könntest, zum Beispiel auf print selbst.

Zusatzaufgabe 3.8

Schreibe ein Programm, das eine positive Kommazahl auf die nächste ganze Zahl rundet, ohne round zu verwenden. Bestimme dazu die Nachkommastelle und entscheide mit einem if, ob auf- oder abgerundet wird.

PythonLoading editor…