Table of Contents

Variablen mit Zahlen, Formatierte Ausgabe

Programme, sollen natürlich verschiedene Dinge tun können. Dazu werden die Daten in Variablen gespeichert und dann mit den Variablen gerechnet.

zahlvar.py
a=3
b=4
 
c=(a**2+b**2)**0.5
 
print("%f im Quadrat plus %f im Quadrat gibt %f im Quadrat." % (a,b,c))
print("%d im Quadrat plus %d im Quadrat gibt %d im Quadrat." % (a,b,c))
print("%d im Quadrat plus %.2f im Quadrat gibt %.4f im Quadrat." % (a,b,c))

Format-Strings

Format-Strings erlauben auf eine bequeme Art und Weise die Ausgabe von Zahlen festzulegen. Der Syntax ist immer der Formatstring (zwischen Anführungszeichen), gefolgt vom Modulo-Operator %, gefolgt von einer Liste mit Werten, die dann im Formatstring die %-Platzhalter ersetzen. Diese Platzhalter sind

Es gibt noch viel mehr Möglichkeiten und Varianten. Siehe offizelle Dokumentation. In Python3 wird zwar eine andere Variante mit .format() empfohlen. Die hier präsentierte Variante ist aber so auch in vielen anderen Programmiersprachen möglich, z.B. in C++, die für die Programmierung von Mikrocontrollern sehr populär ist.

Aufgaben

Nach 20 Jahren ist das Kapital von 100.00 mit einem Zins von 1.0% auf 122.02 angewachsen.
Bei 50 kg Gewicht und der Grösse 160 cm beträgt der bmi 19.5

Lösungsvorschläge

Lösungsvorschläge

zinseszins.py
k=100
p=1
n=20
kn = k*(1+p/100)**n
print("Nach %d Jahren ist das Kapital von %.2f mit einem Zins von %.1f%% auf %.2f angewachsen." % (n,k,p,kn))
bmi.py
m=50
g=160
bmi = ja das müssen Sie schon selber googeln :-P
print("Bei %.f kg Gewicht und der Grösse %d cm beträgt der bmi %.1f" % (m,g,bmi))

Quizz

Was ist jeweils die Ausgabe folgender Zeilen? Können Sie das ohne die Zeilen auszuführen?

print("%d, %f" % (3.14, 3.14))
print("%03d" % 7.92)
a=2
b=3
print("%.2f" % (a/b))
You Scored % - /

Dokumentation und Kuriositäten

Die %f, %s und %d Formatierungen sind in vielen Programmiersprachen und Programmen implementiert und öfter mal praktisch zu kennen.

Die neue Python-Variante verwendet .format, das noch mehr Flexibilität bietet: Siehe https://pyformat.info/

Rundungsregel

“%.2f” rundet mit der Ties to even rule, so ergibt z.B.

Rechenungenauigkeit

Was ist die Ausgabe (10 Summanden 0.1):

print("%.20f" % (0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1))

Erklärung: $\frac{1}{10}$ kann im Zweiersystem nicht abbrechend dargestellt werden (wie z.B. $\frac{1}{3}$ im Dezimalsystem). D.h. es werden zwangsläufig Rechenfehler gemacht, die sich aber oft nur auf letzte von ca. 17 Dezimalstellen auswirken.

Weitere Beispiele sind folgende, wo 17 Stellen Genauigkeit nicht ausreichen:

print("%f" % 10000000000.2)
# produziert 10000000000.200001
print("%f" % 100000000000.2)
# produziert 100000000000.199997