K103: ein erstes Programm Teil II

In diesem Blog lernst Du ein erstes kleines Python Programm zu schreiben und dabei einen Anweisung aus der turtle Bibliothek zu verwenden.

Inhaltsverzeichnis

Dieser Blog wird vom IAIP gratis zur Verfügung gestellt. Der Blog ist ein  Bestandteil des Kurses K103 «Programmieren mit Turtle Graphics» und gehört zur Lektion 1, Themenblock 5 (L1T5).

Der Kurs führt dich durch die einzelnen Blogs, enthält Zusatzmaterialien, Videos, viele Aufgaben mit Lösungen und Quizze zur Lernkontrolle. Der Kurs hat eine Kursgebühr von CHF 50.- Mit dem Einschreiben zum Kurs hilfst du mit, dass solche Blogs auch zukünftig noch gratis zur Verfügung gestellt werden können.5

Allgemein

Einordnung, Ziel

Wir haben in den letzten 2 Themenblöcken Python installiert (siehe Blog K103: Installation von Python) und bereits ein erstes kleines Programm geschrieben (siehe Blog K103: ein erstes Programm). Unser Programm hat allerdings nur aus einer «klassischen» Python Anweisung, namentlich der print() Anweisung, bestanden.

Da es in diesem Kurs ja primär um Turtle Graphics gehen soll, wollen wir nun noch ein Programm schreiben, welches eben dieses Turtle Graphics Modul nutzt.

Ziel

Ziel dieses Themenblocks ist:

Unser erstes Programm

Bevor wir starten wiederum ein paar Worte zum Programm.

Nicht erschrecken! Unser erstes Programm mit Turtle Graphics soll einfach nur eine Linie auf den Bildschirm zeichnen. Wir wollen dem Computer befehlen können, dass er einen Strich zeichnet.

Das sieht dann am Ende «nur» etwa so aus:

Eine solche Ausgabe funktioniert in Python recht einfach. Die entsprechenden Anweisung lauten forward(100). Das heisst, unser erstes Programm nutzt den «Python» Befehl forward(100). Der Befehl veranlasst den Computer eine Linie auf den Bildschirm zu zeichnen. Die Länge der Linie kann man zwischen den runden Klammern ( ) angeben. In unserem Beispiel ist es eine Linie mit einer Länge von 100 Punkten.

Die besondere Herausforderung liegt darin, dass

  • Der Befehl forward(100) kein ursprünglicher (eingebauter) Python Befehl ist. Er kommt von Turtle Graphics. Python kennt die Anweisung zuerst gar nicht.
  • Wir im der Shell keine Linien zeichnen können

Damit dies alles funktioniert, brauchen wir ein paar weitere Anweisungen, namentlich:

  • die Anweisung from turtle import *, welche Python die Turtle Graphics Befehle beibringt.
  • Die Anweisung Screen(), welche für uns ein Fenster öffnet, das auch Linien darstellen kann
  • Die Anweisungen bye() oder exitonclick(), welche für uns dieses zusätzliche Fenster wieder schliessen.

Erste Anweisungen mit Turtle Graphics

Was ist anders bei Turtle Graphics? Zuerst einmal gar nichts! Wir nutzen ja Turtle Graphics als Bestandteil von Python. Das heisst, wir starten dieselbe Entwicklungsumgebung und nutzen dieselben Editoren.

Wir werden wiederum mit der Entwicklungsumgebung IDLE arbeiten. Das gezeigte lässt sich aber direkt auf Spyder oder ein Webinterface wie jenes von Repl.it übertragen. Zur Einführung wiederum ein kleines Video. Wir befinden uns zu Beginn des Videos bereits in der IDE. Das heisst, wie haben bereits IDLE geladen und die geöffnete Shell vor uns.

Was haben wir gemacht?

1. Befehle importieren – damit Python auch versteht, was man möchte.

Turtle Graphics ist wie schon erwähnt ein Abkömmling der Programmiersprache Logo, die natürlich andere Befehle nutzt als Python. Damit Python die Logo Anweisungen zum Bewegen der Schildkröte versteht, muss man vorab ein Modul importieren, welches die Befehle von Logo bzw. Turtle Graphics unterstützt.

Ein grosser Vorteil von Python ist, dass man Python sehr einfach um zusätzliche Funktionen erweitern kann. So muss man nicht in der Programmiersprache Logo programmieren, sondern erweitert Python einfach um diese.

Module

Wie ist das zu verstehen? Python kommt von Natur aus nur mit einem begrenzten Grundwortschatz an Befehlen daher, bietet aber die Möglichkeit, diesen über den Import von Modulen auszubauen. Je nachdem, was man speziell möchte. So gibt es Module mit speziellen Mathematikfunktionen, Module für das Programmieren von Spielen, oder eben beispielsweise ein Modul für Schildkrötenbewegungen. Das ist fast ganz ähnlich wie bei gewissen Computerspielen, wo man die Spielfigur mit zusätzlichen Fähigkeiten ausrüsten kann.

Dass Python nun die Schildkröten-Befehle versteht, haben wir als erstes folgende Anweisung gegeben:

from turtle import *

Das Wort from ist Englisch und heisst übersetzt «von/aus». from turtle bedeutet deshalb so viel wie «aus dem Modul mit dem Namen turtle». Die Anweisung import ist ein Python Befehl zum importieren gewisser Sachen aus dem angegebenen Modul. Der Stern * steht für «alles».

Die Zeile bedeutet somit übersetzt: aus der Bibliothek (dem Modul) mit dem Namen turtle importiere einfach mal alles (hier: alle Befehle).

Durch den Import versteht Python nun eine Reihe an Turtle Graphics Befehlen. Und jetzt wo Python auch die Logo/ Turtle Graphics Anweisungen versteht, können wir beginnen, diese zu erteilen.

2. Bildschirm erstellen – für das Zeichnen von Linien

In Turtle Graphics wollen wir schöne Bilder malen. Unser von der IDLE zur Verfügung gestelltes Ausgabefenster, die Shell, ist für solche Ausgaben aber völlig ungeeignet. Dort können wir nämlich nur einfache Zahlen und Texte ausgeben, so wie wir dies im letzten Themenblock gemacht haben. Linien in die Shell zu zeichnen wäre etwa so, wie wenn du versuchst mit einem Sportauto über einen Wanderweg zu fahren. Dort kann man zwar einfache Sachen machen wie Wandern, aber für ein Sportauto benötigst du eine besser ausgebaute Strasse.

Python benötigt also Ausgabefenster, damit wir die Spuren der Schildkröte überhaupt sehen können. Die zugehörige Anweisung lautet Screen(). Beachte, dass Screen() hier mit einem grossen Buchstaben beginnt.

Screen()

Nach Ausführung des Befehls hat Python für uns das Ausgabefenster erstellt.

Hierzu eine Anmerkung:

  • Theoretisch ist das spezielle Einrichten eines Fenster in den meisten Fällen gar nicht nötig. Denn Turtle Graphics erstellt dies notfalls selber. Zum besseren Verständnis macht es hier aber Sinn. Und möchte man gewisse Fenstereigenschaften anpassen, so kommt man um die Erstellung eines eigenen Fensters nicht umher.
  • Wenn Du die Anweisungen auf deinem Computer eingegeben hast, dann hat sich das Fenster zwar geöffnet, aber die Schildkröte in der Mitte fehlt noch. Das ist weiter kein Problem. Sobald wir uns bewegen werden, kommt sie zum Vorschein.

Nun, nachdem unser Fenster bereit ist, werden alle Befehle ausgeführt. Einer nach dem anderen, genau in der Reihenfolge, wie diese aufgeführt sind.

Hinweis für Fortgeschrittene: Turtle Objekt erstellen

Neben dem Ausgabefenster (Screen) benötigen wir noch eine Schildkröte, mit welcher wir herumfahren können. Das lässt sich in Python ebenfalls rasch erledigen. Die entsprechende Anweisung lautet: Turtle().

Sobald wir die Anweisung gegeben haben, erscheint in der Mitte des Bildschirms unsere «Schildkröte».

Wir haben im Video auf die Anweisung Turtle() verzichtet. Weshalb? Python hat automatisch bemerkt, dass ein Turtle Objekt fehlt und dieses für uns erstellt. Spätestens mit der ersten Bewegung sehen wir also unsere Schildkröte, auch wenn diese nicht durch uns erstellt wurde.

Die «Schildkröte» hat die Form eines Dreiecks, sitzt in der Mitte des Bildschirms und schaut in unserem Beispiel nach rechts. Das Dreieck ist die Standardform einer Schildkröte in Python Turtle Graphics. Wir werden später noch sehen, wie man die Form verändern kann, so dass die Schildkröte mindestens ansatzweise wie eine Schildkröte aussieht.

Die Schildkröte entspricht dem Cursor. Dort wo sie ist, kann etwas passieren. Wir werden im Verlauf dieses Kurses anstelle von «Schildkröte» oft auch einfach nur von einer «Turtle» oder dem «Cursor» sprechen.

3. Eine Linie zeichnen mit der Schildkröte

Als nächstes haben wir eine Anweisung geschrieben, welche unsere Schildkröte bewegen soll. So wie wir im letzten Python Programm die Anweisung print(«Guten Tag») gegeben haben. Hier ist es die Anweisung forward(distanz).

forward(100)

Die Anweisung forward(distanz) (von engl.: vorwärts) bewegt die Schildkröte um die in den Klammern angegebene Strecke vorwärts, und zwar in die Richtung, in welche unsere Turtle zeigt. Die Anweisung forward(100) bewegt somit unsere Turtle um 100 Schritte (Pixel) nach vorne.

4. Screen wieder schliessen

Als letztes müssen wir noch unseren Screen wieder schliessen. Hier gibt es mehrere Möglichkeiten. Im Video haben wir die Anweisung bye() verwendet. Die Anweisung bewirkt, dass das Fenster sofort geschlossen wird, Alternativ könnte man beispielsweise auch die Anweisung exitonclick() nutzen, wie wir gleich sehen werden.

Ein erstes Programm in Turtle Graphics

Im nachfolgenden Video siehst Du, wie wir das Programm in Python bzw. im Quelltexteditor IDLE eingeben und von dort aus ausführen.

Unser Programm hat die folgende Form:

# Bibliothek importieren
from turtle import *

# eigentliche Anweisungen
forward(100)
forward(10)

# Fenster schliessen
exitonclick()

An dieser Stelle lohnt es sich das Programm einfach mal selber auszuprobieren. Kopiere die Zeilen und lasse sie in deinem Editor/Shell laufen.

Was ist anders?

  • Wir haben nun ein Programm geschrieben und dazu den Editor verwendet. Der Interpreter hat das Programm genommen und jede Zeile einzeln, nacheinander verarbeitet.
  • Wenn Du die Befehle des vorangehenden Blocks, insbesondere die Anweisung bye() in eine Datei geschrieben hast, so ist das turtle-Fenster sofort verschwunden, nachdem die Schildkröte ihre Bewegung vollendet hatte. Um das zu verhindern, haben wir hier am Ende des Programms die Anweisung exitonclick() gegeben. Jetzt bleibt das Fenster offen bis der Benutzer noch einmal darauf klickt.
  • Im Programmtext hat es einige neue Zeilen mit einem vorangestellten # Zeichen. Das sind sogenannte Kommentarzeilen. Das Raute Zeichen # führt dazu, dass Python den nachfolgenden Text bis zum Ende der Zeile ignoriert und nicht übersetzt.