Python mit dem GTR

Python mit dem Casio FX-CG 50

Betriebssystem: 3.50     MicroPython: 1.9.4 (Python 3)

Implementierung, Funktionsumfang und Performance

Wer die Leistungsfähigkeit von Python und die damit verbundenen Möglichkeiten kennt, ist schnell ernüchtert, wenn er realisiert, was sich hinter „Casio-Python“ verbirgt. Es handelt sich nämlich beileibe nicht um Standard-Python, sondern lediglich um eine (nochmals abgespeckte) Variante von MicroPython, einer speziellen Python-Version für Mikrocontroller.

Abgesehen von den Sprachgrundlagen mit allen builtin-Funktionen wurden in OS-Version 3.3 zunächst nur die Module math und random hinzugefügt, was immerhin für klassische Python-Konsolenprogramme inkl. Ein- und Ausgabe genügt.

Mit OS-Version 3.4 wurde mit casioplot ein neues Modul hinzugefügt, mit dem nun auch eine – (sehr!) rudimentäre – Grafikprogrammierung ermöglicht wird. In einem 384x192 Pixel großen Teil des Displays (die Statuszeile am oberen Bildschirmrand ist nicht nutzbar) lassen sich:
– alle Pixel einzeln in beliebiger RGB-Farbe setzen
– die RGB-Codes jedes einzelnen Pixels abfragen
– ASCII-Zeichenketten in drei Größen und RGB-Farben ausgeben

Das ist alles. Klngt nach wenig und das ist es auch. Man könnte daraus allerdings etwas machen, indem man erweiterte Zeichenfunktionen selbst implementiert. Zwar sind die Python-Programme auf 300 Zeilen je 255 Zeichen pro Quelltext begrenzt, aber alle selbst erstellten Python-Programme können wiederum als Module in andere Programme importiert werden, so dass es praktisch (bis auf den Speicher des GTR) keine wirkliche Größenbeschränkung gibt.

Erfreulich ist zumindest die Performance des Python-Interpreters, was sowohl für Berechnungen als auch die Grafikausgabe gilt. Letztere ist um den Faktor 60-80 schneller als die (allerdings auch quälend langsame) Grafikausgabe des eingebauen Casio-BASIC. Das Zeichnen eines Funktionsgraphen durch ein Python-Programm unter Verwendung von casioplot ist (mindestens) genau so schnell wie bei Verwendung des eingebauten GRAPH-Moduls.

Programmierung des GTR

Der Python-Interpreter wird über eine eigene App-Kachel aus dem Hauptmenü aufgerufen. Von dort aus hat man Zugriff auf eine Ordnerstruktur, in der man eigene Python-Programme anlegen und speichern kann.
Eine einfache Entwicklungsumgebung mit Editor – immerhin mit farbiger Syntaxhervorhebung – und [RUN]-Knopf erlauben das Erstellen und Ausführen von Python-Programmen.

Das klingt gar nicht so schlecht, ist in der praktischen Handhabung aber eine Zumutung! Die Eingabe von Quelltext ist äußerst mühselig und umständlich. Dadurch dass Python „case sensitive“ ist – Groß- und Kleinschreibung werden unterschieden –, wird die Eingabe noch mühseliger, weil z.B. die [+]-Taste sowohl für das Pluszeichen, die sich öffnende eckige Klammer, das kleine und das große X zuständig ist. Das Umschalten zwischen den einzelnen Tastenbelegungen mittels [Shift] und [Alpha] ist unglaublig nervig und fehleranfällig. Dazu kommt, dass etwa der Doppelpunkt – in Python häufig benötigt – nicht auf der Tastatur ist und darum jedesmal aus dem Zeichenkatalog herausgepickt werden muss.

Zu guter letzt ist die ohnehin gewöhnungsbedürfige, etwas serifenlastige Systemschriftart für die Eingabe von Quelltexten schlicht zu groß. Gerade einmal 21 Zeichen passen in eine Zeile und das ist definitiv zu wenig.
Spätestens jetzt hätte man sich gewünscht, dass es eine Möglichkeit gibt, zumindest die Schriftgröße zu ändern.

Interessanterweise bietet das casioplot-Modul die Möglichkeit, Zeichenketten in drei verschiedenen Schriftgrößen auszugeben. In der (gut lesbaren) Variante „medium“ passen immerhin 32 Zeichen in eine Zeile, bei „small“ sind es 48 (dann allerdings auch ziemlich kleine und auf dem GTR-Display nur noch schlecht lesbare) Zeichen.

Fazit: Der implementierte Python-Interpreter lässt sich – inbesondere mit den Möglichkeiten von casioplot – ganz leidlich nutzen, aber das Entwickeln der Programme mit dem eingebauten Editor direkt am GTR ist eine Qual und nicht zu empfehlen.

Erfreulicherweise wird der Casio FX-CG 50 beim Anschluss an einen Computer via USB-Kabel als Massenspeicher erkannt – und zwar unabhängig vom verwendeten Betriebssystem! Eine gesonderte, an einzelne Betriebssysteme gebundene Spezialsoftware ist dafür nicht erforderlich. So können Python-Programme extern am PC entwickelt und dort mit einem Python-Interpreter getestet werden, bevor man sie als Quelltext-Datei auf den GTR überträgt und dort nutzt.

Dies gilt natürlich nicht bei Verwendung des casioplot-Moduls. Das allerdings ließe sich durch ein eigenes, z.B. auf Tkinter aufsetzendes casioplot-Modul für den PC mit verhältnismäßig geringem Aufwand ändern, so dass man eine Casio-Python-kompatible Entwicklungsumgebung auf dem Computer hätte und erst das fertige Programm auf den GTR überträgt. Damit ließe sich dann ganz passabel arbeiten.

Drei Beispiele

Die Python-Shell als Taschenrechner

Die Python-Shell ist integraler und wichtiger Bestandteil eines jeden Python-Interpreters. Innerhalb eines „Terminalfensters“ kann Python-Code zeilenweise eingeben und direkt ausgeführt werden. Auch die Casio-Implementation von MicroPython verfügt über eine solche Shell.

Das ist äußerst praktisch zum Testen kleinster Codeschnipsel. Ein netter Nebeneffekt ist, dass man die Python-Shell auch als Taschenrechner gut gebrauchen kann. Das ist insofern reizvoll, als Python zu den (wenigen) Programmiersprachen gehört, die Ganzzahloperationen mit beliebiger Genauigkeit ermöglichen – die Grenze setzt nur der Hauptspeicher des jeweiligen Geräts. Auf dem Casio CG-50 liegt die Grenze nach meinen Experimenten etwa bei 500 Stellen.
So lässt sich etwa 345 exakt berechnen und zwar blitzschnell. Das Ergebnis hat 489 Stellen:
373391848 ... 0356481 (die übrigen 473 Stellen lasse ich hier mal weg).

Leider ist die Bedienung der Shell nicht so komfortabel, wie man es von der normalen Python-Shell kennt, wo z.B. mittels der Cursor-Tasten vorherige Eingaben in die aktuelle Zeile zurückgeholt, ggf. modifiziert und erneut ausgeführt werden können. Die Casio-Python-Shell vergisst alles! Jede Zeile muss manuell neu eingegeben werden. Das ist lästig.

Fakultät für große Zahlen

Was liegt näher als die Berechnung von Fakultäten, wenn man ein System hat, das (theoretisch) mit beliebig großen natürlichen Zahlen zurecht kommt. Bekanntlich ist mit 69! bei den allermeisten Taschenrechnern das Ende der Fahnenstange erreicht. 70! ist eine 101-stellige natürliche Zahl und da kapitulieren alle normalen Taschenrechner, weil bei exponentieller Darstellung die Mantisse dreistellig wäre – dafür ist kein Platz.

Kein Problem aber mit den numerischen Möglichkeiten von Python. Zwar kann man nicht auf die GTR-Funktionen zugreifen und in der Shell einfach 70! eingeben (das führt zu einem Syntax-Error, weil das Ausrufezeichen kein definiertes Python-Symbol ist), allerdings ein (sehr einfaches) Python-Programm schreiben, das die Fakultät einer vom Anwender einzugebenden Zahl berechnet.

Nach einigen Versuchen steht das Ergebnis fest: 253! lässt sich gerade noch (und zwar auch hier: blitzschnell) berechnen, bei 254! kommt der GTR an seine Speichergrenze und liefert statt des Ergebnisses eine Fehlermeldung. Das Ergebnis hat übrigens 500 Stellen – die ersten 14 kann man im Screenshot ablesen.
Den vollständigen Quelltext des Programms findet man weiter oben auf dieser Seite.

Grafikprogrammierung

Grundsätzliches zu der sehr eingeschränkten Python-Grafikprogrammierung auf dem Casio CG-50 habe ich oben bereits ausgeführt. Als Beispiel habe ich ein Programm geschrieben, das einen Funktionsgraphen samt Koordinatensystem zeichnet.
Der Funktionsterm ist f(x) = -0,3·x²+2, das Zeichenfenster habe ich passend dazu gewählt. Dass hier nicht mit dem eingebauten Funktionenplotter gearbeitet wurde, sieht man u.a. daran, dass eine vollständige Achsenbeschriftung sowie ein farbiges Achsenkreuz vorliegen. Außerdem habe ich den Graphen bunt gezeichnet – er besteht aus lauter zufällig gefärbten Pixeln.

Zum Vergleich hier der gleiche Graph – diesmal mit dem eingebauten Funktionenplotter gezeichnet. In beiden Fällen ist die Zeichengeschwindigkeit gefühlt identisch.

Nutzen für den Unterricht

So sehr ich die Programmiersprache Python auch schätze – der Python-Interpreter im Casio CG-50 ist letztlich nicht mehr als ein nettes Gimmick. Ein Spielplatz für diejenigen, die sich gerne intensiv mit einem Taschenrechner beschäftigen und Freude daran haben, alles mögliche mit einem GTR zu machen und möglichst viel aus einem solchen Gerät „herauszukitzeln“. Die Attraktivität der Python-Implementation würde deutlich steigen, wenn es eine Schnittstelle zu den eingebauten GTR-Funktionen gäbe, so dass z.B. innerhalb eines Python-Programms Gleichungen und Gleichungssysteme gelöst werden könnten, Graphen und Elemente der vektoriellen Geometrie gezeichnet und mit in Programme einbezogen werden könnten. Aber selbst dann muss man ehrlicherweise sagen:
Für den Mathematikunterricht ist der Python-Interpreter im Casio CG-50 kein Mehrwert.

Eine sinnvolle Einsatzmöglichkeit im Informatikunterricht kann ich ebenfalls nicht erkennen. Da der GTR erst in der Oberstufe verbindlich eingeführt wird, beträfe es auch nur den Informatikunterricht in der Oberstufe. Angesichts der Lehrplanvorgaben und des Zentralabiturs dürfte kaum Platz für ein solches Projekt sein. Und selbst eine „GTR-Programmier-AG“ halte ich für wenig attraktiv, weil das Erstellen von Programmen mit dem GTR einfach nur eine Quälerei ist. Wenn man aber einen externen Editor am PC für die Programmentwicklung nutzt, dann braucht man im Grunde den GTR nicht, sondern kann das Programmieren komplett am PC erledigen.