Skip to content

Zahlen (int, float)

ProgrammierenVariablen & Datentypen

Mit Zahlen kann man rechnen – schon deshalb macht es Sinn, für Zahlen eigene Datentypen zu haben. Aus zwei Zahlen wird mit einer Mathematischen Operation eine neue Zahl berechnet.

Der Computer muss aber Zahlen irgendwie abspeichern. Deshalb kennen die meisten Programmiersprachen mindestens zwei Datentypen für Zahlen. Diese unterscheiden sich darin, wie viel Speicherplatz sie belegen und wie die Daten codiert werden.

Python hat zwei Datentypen für unsere gängigen Zahlen:

int
für Ganze Zahlen
vom Englischen integer
float
für Dezimalbrüche
vom Englischen floating point

int

Im Kapitel «Daten und Information» haben wir die binäre Darstellung von Zahlen kennengelernt. So kann Python ganze Zahlen abspeichern – einzig das Vorzeichen muss noch irgendwie codiert werden.

python
a = 18
b = -1

Im Gegensatz zu vielen anderen Programmiersprachen, gibt es keine feste Grössenbeschränkung für Ganze Zahlen in Python. Die Box wächst also bei Bedarf! Natürlich stellt der Speicher des Gerätes eine Obergrenze dar.

float

Dezimalbrüche werden vom Computer normalerweise in zwei Teilen abgespeichert, ähnlich wie bei der Exponentialschreibweise, wie man sie bei sehr kleinen und sehr grossen Konstanten – z.B. der Elementarladung oder der Plankschen Temperatur – verwendet:

e=1,6021766341019CTP=1,4167841032K

Der Computer speichert sich z.B. für die Elementarladung e zwei Zahlen:

  1. eine gewisse Anzahl Ziffern, also 1602176634
  2. die zugehörige Zehnerpotenz, also 19

Zusammengesetzt ergeben diese beiden Zahlen:

e=1,6021766341019C

Somit können sehr grosse und auch sehr kleine Zahlen dargestellt werden – allerdings nur bis zu einer gewissen Genauigkeit:

python
e = 1.602176634e-19
Tp = 1.4165784e32

Natürlich kann man Dezimalbrüche auch ganz normal notieren, z.B.

python
x = 1.25
y = -0.098
mehr: grösste und kleinste floats

Die grösste und die kleinste Zahl, die mit dem Datentyp float dargestellt werden kann, hängt vom System ab. Man kann sich diese Werte aber ausgeben lassen:

python
import sys
print(sys.float_info.max)
print(sys.float_info.min)
python
import sys
print(sys.float_info.max.hex())
print(sys.float_info.min.hex())

Grössere Zahlen erhalten in Python den Wert inf, also «unendlich»:

python
import sys
print(2*sys.float_info.max)

Warnung: Rundungsfehler

Da floats nicht beliebig exakt gespeichert werden können, entstehen Rundungsfehler. Bereits das folgende Beispiel liefert nicht das erwartete Ergebnis:

python
print(0.1 + 0.1 + 0.1)

Dies, weil der Computer die Ziffern als binäre Zahlen abspeichert.

Im Dezimalsystem haben wir ähnliche Probleme, wenn wir z.B. 1/3 als Dezimalbruch – also 0.3333… – darstellen wollen. Da reichen endlich viele Stellen nicht!

Arithmetische Operatoren

Diese werden verwendet, um mit Zahlen zu rechnen. Der ausgewertete Ausdruck ergibt wieder eine Zahl. Die Operatoren entsprechen mehr oder weniger den von der Mathematik bekannten Grundrechenarten:

Arithmetische Operatoren für Zahlen
OperandOperationBemerkung
+AdditionZusammenzählen
-SubtraktionMinusrechnen
*MultiplikationMalrechnen
/DivisionDurchrechnen, Ergebnis ist ein float
//ganzzahlige DivisionErgebnis ist ein int
%ModuloRest der ganzzahligen Division als int
**PotenzierenHochrechnen
mehr: Ganzzahlige Division und Modulo:11=24+3

also 11 ganzzahlig dividiert durch 4 gibt 2 Rest 3

11/4=211mod4=3

Ausdrücke

Ein Ausdruck ist etwas, das Python auswerten, resp. berechnen kann. Wir können mit Variablen, Werten und Operatoren Ausdrücke programmieren:

z.B. könnten wir einen Ausdruck schreiben, der die Fläche eines Dreiecks berechnet:

python
s = float(input("gib die Seitenlänge ein: "))
h = float(input("gib die Höhe ein: "))
A_dreieck = s * h / 2
print("Die Fläche des Dreiecks beträgt:", A_dreieck)

Die Formel steckt in der dritten Zeile.

Bei der Auswertung gilt die «Punkt-vor-Strich»-Regel. Im Zweifelsfall können Klammern gesetzt werden:

python
ergebnis1 = 12 + 2 / 7
ergebnis2 = (12 + 2) / 7
ergebnis3 = 12 + (2 / 7)
print(ergebnis1, ergebnis2, ergebnis3)

Aufgabe: Klammern

Überlege dir, wie die Klammern im obenstehenden Beispiel die 3 «Ergebnis»-Werte beeinflussen. Überprüfe dann deine Vermutungen, indem du das Programm ausführst.

Aufgabe: Geometrie

Nimm das Programm zur Berechnung der Dreiecksfläche als Vorlage und schreibe ähnliche Programme zur Berechnung weiterer geometrischer Werte:

  • Umfang und Fläche eines Kreises abhängig von dessen Radius
  • Länge der Hypothenuse bei einem rechteckigen Dreieck mit Pythagoras bei gegebenen Kathetenlängen
  • Umfang, Volumen und Fläche einer Kugel abhängig von dessen Radius

Speichere jedes Programm unter einem aussagekräftigen Namen, z.B. kreisberechnung.py ab.

Lösung: Geometrie
python
from math import pi

r = float(input("gib den Radius des Kreises ein: "))

A_kreis = r ** 2 * pi
U_kreis = 2 * r * pi

print("Die Fläche des Kreises beträgt:", A_kreis)
print("Der Umfang des Kreises beträgt:", U_kreis)
python
from math import sqrt

a = float(input("gib die Länge der ersten Kathete ein: "))
b = float(input("gib die Länge der zweiten Kathete ein: "))

c = sqrt(a**2 + b**2)   # Variante 1: mit Quadratwurzel
c = (a**2 + b**2)**0.5  # Variante 2: mit «Hoch 1/2»

print("Die Hypothenuse hat eine Länge von:", c)
python
from math import pi

r = float(input("gib den Radius der Kugel ein: "))

V_kugel = (4/3) * pi * r**3
print("Das Volumen der Kugel beträgt:", V_kugel)

A_kugel = 4*pi * r**2
print("Die Oberfläche der Kugel beträgt:", A_kugel)

Zusatzaufgabe: Quadratische Gleichung

Schaffst du es, die Lösungsformel für Quadratische Gleichungen zu programmieren?

Du kennst also die drei Koeffizienten a, b und c der Gleichung

ax2+bx+c=0

und möchtest damit Lösungswerte für x berechnen.

Vergleichsoperatoren

Mit zwei Zahlen kann man nicht nur rechnen, man kann sie auch vergleichen. Eigentlich ist das ja auch eine Berechnung – das Ergebnis ist nur keine Zahl, sondern ein Wahrheitswert:

Vergleichsoperatoren für Zahlen
OperandOperationBemerkung
==gleicher Wertfür Float gefährlich
!=nicht gleichfür Float gefährlich
<kleiner als
>grösser als
<=kleiner gleich
>=grösser gleich
python
print(12 >= 1)
print(12.1 < 12)
print(12.0 == 12)
print(1/3 > 0.333333)
print(3 * 0.1 == 0.3)

Zusatzaufgabe: Logik

Schau dir das folgende Programm an:

python
a = int(input("gib eine Zahl ein: "))
b = int(input("gib eine weitere Zahl ein: "))

print("<", a < b)
print(">", a > b)
print("<=", a <= b)
print(">=", a >= b)
print("")
print("==", a == b)
print("!=", a != b)

Wie könnten die Ergebnisse der Vergleiche mit == und != mit den vier obenstehenden Ergebnissen <, >, <= und >= für jede mögliche Kombination von a und b vorhergesagt werden?

Verkettung

Python bietet eine Spezialität unter den Programmiersprachen: Vergleichsoperatoren können verkettet werden:

python
zahl = int(input("Bitte gib eine Ganze Zahl ein: "))
resultat = 16 < zahl < 32
print("liegt diese Zahl zwischen 16 und 32?")
print(resultat)
python
zahl = int(input("Bitte gib eine Ganze Zahl ein: "))
resultat = 16 < zahl and zahl < 32
print("liegt diese Zahl zwischen 16 und 32?")
print(resultat)
mehr: Wieso ist das nicht selbstverständlich?

Die meisten Programmiersprachen werten einen Ausdruck wie 16 < zahl < 32 Schrittweise aus:

python
zahl = 19
resultat = 16 < zahl < 32
python
zahl = 19
resultat = 16 < 19 < 32
python
zahl = 19
resultat = (16 < 19) < 32
python
zahl = 19
resultat = True < 32
python
zahl = 19
resultat = (True < 32) // [!code error]

Da zuerst 16 < zahl ausgewertet wird und das Ergebnis ein Wahrheitswert ergibt, gibt es beim nächsten Schritt einen Error: Es wird nämlich verglichen, ob der Wahrheitswert kleiner als 32 ist.

Python erkennt also so eine Verkettung und macht automatisch mehrere mit and verknüpfte Ausdrücke daraus.

Gymnasium Kirchenfeld, fts