Skip to content

Zahlen (int, float)

Programmieren

Mit Zahlen kann man rechnen: 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 Arten von 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

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

Eingabe von Zahlen

Da mit input beliebige Eingaben vom User übernommen werden, müssen wir diese jeweils ins gewünschte Format bringen:

python
r = float(input("gib den Radius des Kreises ein: "))
x = int(input("gib eine Zahl zwischen 1 und 100 ein: "))
print(r,x)
Zeile 1
input liefert Text. Wir verwenden float, um eine Kommazahl zu erhalten
Zeile 2
input liefert Text. Wir verwenden float, um eine Kommazahl zu erhalten

Aufgabe

Was geschieht wenn wir keine korrekte Zahl eingeben?

  • Kopiere das obenstehende Beispiel in Thonny
  • Starte das Programm mit den folgenden Eingaben
Radius
1, 2.3, «Hallo»
Zahl
1, 2.3, «Hallo»

Wo klappt es und wo nicht?

Lösung
Radius
1 -> 1.0
2.3 -> 2.3
Hallo -> Error
Zahl
1 -> 1
2.3 -> Error
Hallo -> Error

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:

kreis.py
Umfang und Fläche eines Kreises abhängig von dessen Radius
pythagoras.py
Länge der Hypothenuse bei einem rechteckigen Dreieck mit Pythagoras bei gegebenen Kathetenlängen
kugel.py
Umfang, Volumen und Fläche einer Kugel abhängig von dessen Radius
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.

Lösung: Quadratische Gleichung
python
from math import sqrt

print("Dieses Programm löst eine Quadratische")
print("Gleichung der Form ax^2 + bx + c = 0")

a = float(input("Gib den Wert für den Koeffizienten a ein: "))
b = float(input("Gib den Wert für den Koeffizienten b ein: "))
c = float(input("Gib den Wert für den Koeffizienten c ein: "))

x1 = (-b + sqrt(b**2 - 4*a*c))/(2*a)
x2 = (-b - sqrt(b**2 - 4*a*c))/(2*a)

print("Die Lösungen lauten:")
print("x1 =", x1)
print("x2 =", x2)

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?

Aufgabe: Zahlen raten

Wir programmieren ein Zahlenraten:

  • der Computer wählt zufällig eine Zahl zwischen 1 und 100
  • der User versucht die Zahl zu erraten
  • der Computers sagt, ob die gesuchte Zahl grösser oder kleiner als der abgegeben Tipp ist.

Programmiere dieses Spiel, indem du die untenstehende Vorlage ab Zeile 8 erweiterst.

python
from random import randint

x = randint(1,100)

while True:
    tipp = int(input("rate"))
    print("gewonnen: ", x==tipp)
    # computer gibt tipps, ob grösser oder kleiner
Zeile 1
die Funktion randint wird aus dem Modul random importiert
Zeile 3
es wird eine Zufallswert (ganze Zahl zwischen 1 und 100) erzeugt und der Variablen x zugewiesen.
Zeile 5
wir wiederholen die Tippabgabe und die Rückmeldung des Computers
Lösung: Zahlen raten
python
from random import randint

x = randint(1,100)

while True:
    tipp = int(input("rate"))
    print("gewonnen: ", x==tipp)
    print("gesuchte Zahl ist grösser: ", x>tipp)
    print("gesuchte Zahl ist kleiner: ", x<tipp)

Aufgabe: Zahlen Faktorisieren

Programmiere ein Spiel, wo der User vom Computer generierte Zahlen in ihre Faktoren zerlegen muss:

  • Der Computer wählt zufällig eine Ganze Zahl (z.B. zwischen 1 und 100).
  • Der Benutzer kann dann einen Teiler der Zahl eintippen.
  • Die Zahl wird durch die Eingabe dividiert und dieses Vorgehen wird wiederholt.
  • Der Benutzer hat gewonnen, wenn 1 übrigbleibt

Verwende als Vorlage das vorherige Rate-Spiel: Dort hast du bereits die Zufallszahl und die Wiederholung eingebaut.

Lösung: Faktorisieren
python
from random import randint

x = randint(1,100)

print("Wir faktorisieren die Zahl ", x)

while True:
    faktor = int(input("Gib einen Faktor ein: "))
    x = x / faktor
    print("Es bleibt übrig: ", x)
    print("Du bist fertig: ", x==1)
    print("Du hast einen Fehler: ", int(x)!=x)

Gymnasium Kirchenfeld, fts