Archiv der Kategorie: Schule

Mermaid Spickzettel

Durch einen Post im Fediverse bin ich auf Mermaid.js gestoßen, eine wunderbare Möglichkeit schnell und einfach verschiedene Diagrammtypen innerhalb eines Markdown Dokumentes zu erstellen. Die Syntax ist sehr einfach, aber trotzdem mächtig genug für komplexe Diagramme.

iWriter Pro auf dem iPad. Links die Live-Vorschau, rechts das editierte Markdown Dokument.

Netterweise unterstützen sowohl Visual Studio Code (mit einem Markdown Plugin) am PC und iWriter Pro auf dem iPad die Syntax, so dass ich wohl in Kürze im Unterricht darauf zurück greifen werde und meine kläglichen handschriftlichen Kritzeleien damit endlich ein Ende finden können.

Für die wichtigsten Diagrammtypen habe ich mir einen Spickzettel erstellt, den ich euch nicht vorenthalten möchte:

Python und Gleitkommazahlen

Da ich dieses Halbjahr im Wahlpflichtfach Informatik nach langer Zeit mal wieder in Python programmieren wollte, habe ich meine Beispielprogramme einer kurzen Prüfung unterzogen. Bei einem Programm stutzte ich allerdings dann doch über die Ausgabe:

# Variablen
geld = 10
kostenProTuete = 1.20
anzahlTueten = 0

# Twilight Sparkle geht einkaufen
while geld - kostenProTuete > 0:
    geld = geld - kostenProTuete
    anzahlTueten = anzahlTueten +1

print("Twilight Sparkle hat", anzahlTueten, "Panini Tüten gekauft.")
print("Sie hat noch", geld, "übrig.")

Folgendes wurde vom Programm ausgegeben:

Twilight Sparkle hat 8 Panini Tüten gekauft.
Sie hat noch 0.3999999999999999 übrig.

Äh, what?
Ich dachte eigentlich, dass Münzen kleiner als 1 Cent nicht mehr im Umlauf wären, der Halfpenny ist ja schon länger nicht mehr zu bekommen.

Tja, vermutich ein Bug in Pyto, der Entwicklungsumgebung, die der beste Schulträger von allen auf den iPads der Schüler installiert hat. Also schnell auf dem heimischen iPad mit Pythonista getestet: Gleiches Ergebnis.

Ok, es gibt ja noch a-shell, da ist auch ein Python mit dabei! Gleiches Ergebnis. Wie übrigens auch unter Python auf dem PC. Dort habe ich dann direkt noch etwas herumgespielt:

10-1.1
8.9
8.9-1.1
7.800000000000001
7.8-1.1
6.699999999999999
6.6-1.1
5.5
5.5-1.1
4.4
4.4-1.1
3.3000000000000003
3.3-1.1
2.1999999999999997
2.1-1.1
1.0

Das sieht nicht gesund aus. Das sieht gar nicht gesund aus! Eine kurze Recherche später landete ich auf dieser Seite: What Every Programmer Should Know About Floating-Point Arithmetic or Why don’t my numbers add up?

Kurz eingelesen und schlau gemacht: Rundungsfehler bei der Speicherung der Zahlen sind für die merkwürdigen Ergebnisse verantwortlich. Übrigens in fast allen Programmiersprachen, wie dieser wunderbaren Übersicht zu entnehmen ist.

Als Lösung kann man in Python das Modul „decimal“ verwenden, wie der Spickzettel vorschlägt. Ich glaube aber nicht, dass ich meinen SchülerInnen das vorschlagen werde, schließlich sind es allesamt Programmieranfänger. Außerdem tut es ihnen gut zu wissen, dass Computer zwar schneller rechnen können, aber nicht besser!