Programmieren Teil 1 – TurtleGraphics, python-Grundlagen

Weiter zu Programmieren Teil 2 – Rechnen, Strings und While-Schleife

Lernziele

So sieht python-Code aus.

Ein Computer ist eine Maschine, die wahnsinnig schnell arbeiten (rechnen) kann. Damit du auf dem Computer zum Beispiel ein Spiel spielen kannst, muss jemand das Spiel programmieren. Jemand muss ein Computerprogramm oder Code, schreiben. Computerporgramme bestehen aus Befehlen, die der Computer auszuführen hat. Damit der Computer auch versteht, was er machen soll, müssen Programmierer:innen und Computer 'die gleiche Sprache' sprechen. Es gibt viele unterschiedliche Programmiersprachen mit unterschiedlichen Anwendungsbereiechen, Vor- und Nachteilen.

Wir wählen hier die Programmiersprache Python. Im Jahre 2020 ist diese Sprache sicher in der Top 3 der wichtigsten Programmiersprachen - wenn nicht sogar auf dem ersten Platz. Dazu kommt, dass Python im Vergleich zu anderen Sprachen, z.B. C++ (C Plus Plus), Java oder C# (C Sharp) relativ einfach zu erlernen ist.

Wenn wir einen Satz mit vielen Schreibfehlern lesen, so sind wir trotzdem in der Lage, den Satz zu verstehen. Der Computer aber kann ein Programm nur ausführen, wenn es gar keine Fehler, sogenannte Bugs, hat. Es ist deshalb ganz wichtig, dass du dich an die formalen Vorgaben der Programmiersprache hältst.

Um unseren Code zu schreiben und auszuführen, brauchen wir eine sogenannte IDE (Integrated Development Environment, auf Deutsch Entwicklungsumgebung). Typischerweise sind Entwicklungsumgebungen Programme, die man auf seinem Computer installiert. Mittlerweile gibt es aber auch zahlreiche Online-Entwicklungsumgebungen, mit denen man arbeiten kann. Wir werden zuerst mit einer solchen arbeiten: https://webtigerpython.ethz.ch/

  1. Schreibe Code, führe aus (grüner Pfeil)
  2. Speichere regelmässig:
    1. Variante a – alles in einem Dokument/Notizbuch: Übertrage den Code per Copy-Paste (CTRL C & V) in ein Word-Dokument oder OneNote-Notizbuch. Du kannst auch bloss den Permalink kopieren und einfügen: Hierzu oben rechts auf den Share-Button klicken, dann den Link am gewünschten Ort einfügen.
    2. Variante b – jedes Programm in einer Python-Datei: Speichere deinen Code als Python-Datei. Hierzu oben rechts auf die drei Pünktchen klicken, dann auf Save program (Programm speichern) klicken. Die Python-Datei ist nun im Downloads-Ordner. Verschiebe sie von hier in den richtigen Ordner, zum Beispiel: Informatik/Programmieren1/…
    3. So oder so gilt: Speichere jeden Code so, dass du ihn jederzeit wieder findest. Vergisst du einen Code zu speichern, muss du ihn nochmals schreiben.
  • Im Dossier gibt es viele kleine Code-Beispiele. Tippe diese jeweils von Hand ab und versuche, alles zu verstehen. Wenn du den Code per Copy-Paste kopierst, lernst du gar nichts!

Was ist TurtleGraphics?

TurtleGraphics ist ein Python-Modul, mit dem du eine Schildkröte (engl. turtle) steuern und so Grafiken zeichnen kannst. Du sagst der Schildkröte, welchen Weg sie laufen soll und sie zieht eine Spur hinter sich her. Du kannst die Farbe und Dicke dieser Spur bestimmen und vieles mehr. Das Bild links ist mit TurtleGraphics gezeichnet. Die Schildkröte ist versteckt (siehe Tabelle mit Befehlen unten).



Erste Schritte

Tippe folgenden Code in den Editor:

from gturtle import *
 
karl = Turtle()
 
fritz.forward(100)

Verwende anstelle von karl deinen Namen (keine Bindestriche im Namen!)

Erklärung der Zeilen:

  1. Zuerst musst du das Modul gturtle importieren, damit wir mit Turtlegrafik arbeiten können.
  2. Erzeuge einen neuen Turtle mit einem Namen. Man nennt dieses auch ein Turtle-Objekt.
  3. Gib deinem Turtle den Befehl, 100 Pixel vorwärts zu laufen.

Du kannst deinem Turtle nun auch sagen, er soll sich um einen gewissen Winkel drehen oder rückwärts laufen. Die wichtigsten Befehle sind:

Befehl Beschreibung
forward(s) s Schritte (in Pixel) vorwärts bewegen
back(s) s Schritte rückwärts bewegen
right(w) um den Winkel w (in Grad) nach rechts drehen
left(w) um den Winkel w nach links drehen
setPos(-100,50) Setzt Turtle an Position (-100,50)
setX(30) setzt x-Koordinate des Turtles
setY(30) setzt y-Koordinate des Turtles
setHeading(w) setzt die Richtung der Turtle (0 gegen oben, im Uhrzeigersinn)
hideTurtle() Turtle versteckt sich, darauf folgende Befehle werden instantan ausgeführt

Link zur Dokumentation mit allen Befehlen

Aufgabe A1

Programmiere deine Turtle so, dass sie ein Quadrat abläuft. Die Position, in der sich die Turtle am Schluss befindet, ist irrelevant. Auch ob die Figur etwas kleiner oder grösser gerät, ist egal.

Tipps:

Aufgabe A2

Programmiere nun ein gleichseitiges Dreieck.

Aufgabe A3

Und nun ein regelmässiges Sechseck.

Aufgabe A4

Zeichne nun zwei identische Quadrate nebeneinander:

Tipps:

Aufgabe A5

Programmiere deine Turtle so, dass sie deinen Namen, Spitznamen oder zumindest deine Initialen abläuft.

Folgender Code erzeugt ein Quadrat mit Seitenlänge 120 Pixel:

from gturtle import *
fritz = Turtle()
 
fritz.forward(120)
fritz.left(90)
fritz.forward(120)
fritz.left(90)
fritz.forward(120)
fritz.left(90)
fritz.forward(120)
fritz.left(90)

Nun möchten wir das Quadrat grösser machen: mit $200$ Pixel Seitenlänge. Dazu müssen wir jetzt die vier Werte mit $120$ zu $200$ ändern, was etwas umständlich ist. Es gibt einen einfacheren Weg: Wir speichern die gewünschte Seitenlänge in einer Variable, z.B. length = 200. Nun können wir einfach fritz.forward(length) schreiben und es wird für length der Wert $200$ eingefügt:

from gturtle import *
fritz = Turtle()
 
length = 200
fritz.forward(length)
fritz.left(90)
fritz.forward(length)
fritz.left(90)
fritz.forward(length)
fritz.left(90)
fritz.forward(length)
fritz.left(90)

Wenn wir die Seitenlänge nun wieder ändern wollen, so müssen wir nur den Wert der Variablen ändern, z.B. length = 50. Wichtig ist immer, dass man die Variable festlegt bevor man sie verwendet, also oberhalb im Code.

Weiter fällt auf, dass dieser Codeblock viel Copy-Paste beinhaltet: Der folgende Codeblock kommt 4x direkt hintereinander vor:

fritz.forward(length)
fritz.left(90)

Deshalb können wir auch einfach sagen, dass dieser Codeblock 4x hintereinander wiederholt (→ repeated) werden soll:

repeat 4:
    fritz.forward(length)
    fritz.left(90)

Da ein Codeblock mehrfach hintereinander ausgeführt wird, spricht man von einer Schleife. Beachte, dass der Codeblock, der wiederholt werden soll, eingerückt sein muss. Verwende dazu die Tabulatortaste1). Weiter ist es wichtig, den Doppelpunkt im repeat-Befehl nicht zu vergessen.

Variablen

  • Eine Variable ist wie ein Behälter, in dem du einen Wert – zum Beispiel eine Zahl oder einen Text – speichern kannst.
  • Eine Variable hat einen Namen, den du frei wählen kannst (Umlaute und Sonderzeichen sind nicht erlaubt).
  • Über den Namen kannst du auf den Wert, der in der Variable gespeichert ist, zugreifen: Du kannst den Wert abfragen, neu setzen oder verändern (erhöhen, verringern, multiplizieren etc.)
  • Eine Variable bringt dir unter anderem folgende Vorteile (siehe auch Beispiele oben):
    • Du kannst eine Variable einmal definieren und dann an vielen Stellen verwenden. Falls du den Wert ändern möchtest, brauchst du das nur an einer Stelle zu tun.
    • Du kannst den Wert in einer Variable verändern, ohne diesen zu kennen. So kannst du zum Beispiel den Radius eines Hablkreises in jedem Schleifen-Durchlauf um 10 erhöhen: radius = radius + 10
    • Du kannst eine Eingabe (zum Beispiel von der Benutzer:in) in einer Variable speichern und diese dann abfragen (siehe Kapitel Verzweigungen).

repeat-Schleife

  • Mit der repeat-Schleife kannst du einen oder mehrere Befehele wiederholt ausführen lassen.
  • Damit kannst du einen Code, der viele Wiederholungen enthält, viel kürzer schreiben. Je kürzer dein Code ist, desto weniger Fehler kann er enthalten.
  • Nach dem Wort repeat schreibst du die Anzahl Wiederholungen hin (hier könnte auch eine Variable stehen), dann einen Doppelpunkt.
  • Alle Befehle, die wiederholt werden sollen, müssen direkt unterhalb und um eine Ebene eingerückt stehen. Verwende die Tabulatortaste.

Aufgabe B1

Nun wollen wir einige der Figuren aus A nochmals zeichnen, diesmal aber mithilfe von Variablen und Schleifen. Löse jede Aufgabe mit einem eigenen Code (also nicht alle Figuren zusammen):

  1. Quadrat
  2. Dreieck
  3. Sechseck

Aufgabe B2

Zeichne eine Treppe mithilfe einer Variable und einer Schleife:

Aufgabe B3

Zeichne folgende Figur (Variable optional):

Aufgabe B4

In einer A-Aufgabe hast du zwei Quadrate nebeneinander gezeichnet. Wahrscheinlich war dieser Code ziemlich lange. Schreibe jetzt einen Code, der das gleiche Bild erzeugt, der aber viel kürzer ist, indem du zwei Schleifen verwendest: Eine Schleife für jedes der Quadrate.

Aufgabe B5

Zeichne nun ein grosses und ein kleines Quadrat nebeneinander. Verwende wieder Variablen und Schleifen.

Um eine Turtle namens fritz einen Punkt mit Radius 20 Pixel zeichnen zu lassen, tippe einfach:

fritz.dot(20)

Bisher haben wir unsere Turtles ausschliesslich gerade Linien laufen lassen. Um auf einem Bogen (engl. „arc“) zu gehen, verwende die Befehle

fritz.rightArc(r, w)
fritz.leftArc(r, w)

Diese beiden Funktionen zeichnen einen Bogen nach rechts (rightArc) und nach links (leftArc). Diesen Funktionen muss man zwei Zahlen als Argumente übergeben:

  • Zahl r: Radius des Kreises in Pixel
  • Zahl w: Winkel in Grad

Zum Beispiel zeichnet man mit dem Befehl rightArc(100, 180) einen Halbkreis (180 Grad Winkel) mit Radius 100 Pixel.

Freiwillig: Mit setPenColor("red") die Farbe ändern.

Aufgabe C1

Verwende die Befehle dot(), forward(), right(), left(), um folgende Figur zu zeichnen:

Versuche nun deinen Code zu kurz wie möglich zu schreiben. Vermeide Code-Wiederholungen, in dem du eine Schleife programmierst. Definiere wo sinnvoll Variablen.

Aufgabe C2

Zeichne folgende Figur, welche aus lauter Halbkreisen besteht:

Tipp: Verwende hier leftArc(...) und rightArc().

Aufgabe C3

Zeichne folgende Figur, welche aus drei Halbkreisen besteht:

Beachte, dass der grosse Halbkreis einen doppelt so grossen Radius hat wie die kleinen beiden Halbkreise. Du kannst deshalb den grossen Radius über den kleinen Radius definieren:

radius_1 = 70 # lege kleinen Radius fest
radius_2 = 2 * radius_1 # grosse Radius wird als 2x der kleine Radius definiert

Aufgabe C4

Zeichne folgende Figur, welche aus sieben Halbkreisen besteht:

Schreibe den Code möglichst kurz, verwende Variable(n) und Schleife(n).

Aufgabe C5

Zeichne folgende Figur. Jede der beiden Spiralen besteht aus 14 Viertelkreisen.

Schreibe den Code möglichst kurz, verwende Variable(n) und Schleife(n).

Aufgabe C6 (optional)

Zeichne folgende Figur aus acht Sechsecken ineinander.

Schreibe den Code möglichst kurz, verwende Variable(n) und Schleife(n).

Tipp:

Wir können nun auch etwas Farbe ins Spiel bringen:

  • Mit setPenColor("red") kannst du die Farbe des Stifts festlegen.
  • Mit setPenWidth(10) kannst du die Dicke des Stifts festlegen.
  • Mit clear("black") ganz am Anfang des Codes (bevor man Turtle erzeugt) kannst du die Hintergrundfarbe festlegen.
  • Mit setFillColor("blue"), startPath() und fillPath() kannst du eine Fläche farbig ausfüllen.

In der Dokumentation findest du genauere Erklärungen zu diesen (und allen anderen) Turtle-Befehlen.

Aufgabe D1

Zeichne ein farbiges Quadrat mit dicken Linien und einer Hintergrundfarbe:

Aufgabe D2

Zeichne einen Smiley:

Aufgabe D3

Zeichne eine Ampel:

Aufgabe D4

Zeichne einen Lolli:

Präsentation zu Verzweigungen

In Verzweigungen werden Bedingungen überprüft. Je nachdem, wird unterschiedlicher Code ausgeführt.

Beispiel 1:

answer = input("Was gibt 37 + 5?")
 
if answer == 42:
    print("Korrekt!")
else:
    print("Falsch!")
 
print("Auf Wiedersehen")

Beispiel 2:

answer = input("Was gibt 37 + 5?")
 
if answer == 42:
    print("Korrekt!")
elif answer == 40:
    print("Fast, um 1 zu tief!")
elif answer == 41:
    print("Fast, um 1 zu hoch!")
else:
    print("Falsch!")
 
print("Auf Wiedersehen")

Beispiel 3:

money = input("Wie viel Geld hast du?")
 
if money >= 1000000:
    print("Du bist Millionär!")
else:
    print("Du bist kein Millionär!")

Vergleichsoperatoren:

Vergleichsoperator Überprüft ob …
x == y x gleich y ist.
x != y x ungleich y ist.
x > y x grösser als y ist.
x < y x kleiner als y ist.
x >= y x grösser oder gleich y ist.
x <= y x kleiner oder gleich y ist.

Beachte: Einige Aufgaben sollen mit TurtleGraphics gelöst werden, andere ohne. Den TurtleCode from gturtle import * usw. soll nur dann geschrieben werden, wenn man auch eine Turtle hat.

Aufgabe E1

Schreibe einen Code, in dem die Benutzerin dazu aufgefordert wird, deine Lieblingszahl zu erraten. Gelingt es ihr, so wird ihr gratuliert. Falls nicht, wird sie dafür kritisiert, dass sie dies nicht weiss.

Aufgabe E2

  1. Die Benutzerin soll dazu aufgefordert werden, den Buchstaben „q“ einzugeben. Fall sie dies macht, soll ein Quadrat gezeichnet werden. Falls irgendetwas anderes eingegeben wird, soll nichts gezeichnet werden. Stattdessen soll ausgegeben werden (mit print("...")), dass eine unzulässige Eingabe gemacht wurde.

  2. Modifiziere nun den Code oben so, dass man (neben „q“ für Quadrat) auch „d“ eingeben kann, damit ein Dreieck gezeichnet wird.

Aufgabe E3

Witz-Sammlung: Notiere 3 bis 5 Witze. Die Benutzerin soll aufgefordert werden, eine Zahl 1-… einzugeben. Gibt sie eine 1/2/3 ein, so soll der erste/zweite/dritte Witz angezeigt werden. Macht sie eine falsche Eingabe, so soll einfach nichts passieren.

Aufgabe E4

Volljährig Checker: Die Benutzerin wird aufgefordert, ihr Alter einzugeben. Überprüfe ob sie volljährig ist oder nicht und gib entsprechend „volljährig“ oder „minderjährig“ aus. Beachte, dass es hier einen anderen Vergleichsoperator braucht als ==: < , > , <= , >=.

Aufgabe E5

Positiv, Null oder negativ? Die Benutzerin wird aufgefordert, eine Zahl einzugeben. Der Code gibt aus „positiv“, „Null“ oder „negativ“.

Aufgabe E6

Grössere Zahl: Die Benutzerin wird aufgefordert, hintereinander zwei Zahlen einzugeben. Speichere diese zwei Zahlen in unterschiedlichen Variablen. Die grössere der beiden Zahlen soll dann ausgegeben werden.

Beispiel: Falls zuerst $5$ und dann $7$ eingegeben wird, soll $7$ ausgegeben werden.

Aufgabe E7

Schreibe möglichst kurzen Code, der eine zweifarbige, quadratische Spirale aus 16 Seiten wie im Bild unten zeichnet: Start mit Seitenlänge 20, Zunahme jeweils um 10. Ab Seitenlänge 100 soll die Farbe von rot auf blau wechseln.

Hinweise:

Aufgabe E8

Schreibe möglichst kurzen Code, der ein dreifarbiges Muster aus 9 Kreisen wie im Bild unten zeichnet: Start mit Radius 100, Abnahme jeweils um 10. Ab Radius 70 soll die Farbe auf blau wechseln und ab Radius 40 auf rot.

Aufgabe E9

1 bis 12 Punkte: Schreibe möglichst kurzen Code, der folgende Anforderungen erfüllt:

  • Die Benutzer:in kann eingeben, wie viele Punkte gezeichnet werden sollen, es wird eine Eingabe zwischen 1 und 12 erwartet.
  • Wenn die Eingabe zu gering ist, wird eine entsprechende Meldung ausgegeben und es wird genau 1 Punkt gezeichnet.
  • Wenn die Eingabe zu gross ist, wird eine entsprechende Meldung ausgegeben und es werden genau 12 Punkte gezeichnet.
  • (Ansonsten werden so viele Punkte gezeichnet, wie eingegeben).
  • Es werden von links nach rechts 20-px-Punkte im Abstand von 20 px gezeichnet, siehe Bild.

Aufgabe E10

Farbiger Punkt: Schreibe möglichst kurzen Code, der folgende Anforderungen erfüllt:

  • Die Benutzer:in kann zwischen drei angebotenen Farben wählen, indem sie den Namen der Farbe (auf Deutsch) eingibt.
  • Wenn die Benutzerin eine ungültige Farbe eingibt, wird eine entsprechende Meldung ausgegeben und die Punktfarbe bleibt schwarz.
  • Es wird ein grosser 100-px-Punkt in der gewählten Farbe gezeichnet, siehe Bild.

Ein Code mit Verzweigungen können wir mit einem Flussidagramm darstellen und beschreiben. Hier ein Beispiel:

from gturtle import *
 
morla = Turtle()
 
note = input("Informatik-Note eingeben.")
 
if note >= 5:
    morla.setPenColor("green")
elif note >= 4:
    morla.setPenColor("yellow")
else:
    morla.setPenColor("red")
 
morla.dot(100)

Obiger Code ist im folgenden Flussiagramm dargestellt. Die einzelnen Blöcke beschreiben, was der jeweilige Befehl tut:

Dieses Flussdiagramm sollte jede Person lesen können – egal ob sie python-Befehle kennt oder nicht. Anhand des Flussdiagramms können wir verstehen, wie der Code funktioniert.

Zeichne deine Lösung für folgende Aufgaben von Hand und ohne Lineal:

  • auf Papier oder
  • auf dem Display deines Laptops, zum Beispiel in Powerpoint oder OneNote

Lege deine Lösung (Foto oder Screenshot davon) bei den anderen Dateien ab.

Aufgabe E11

Zeichne ein Flussdiagramm zu folgendem Code. Beschrifte die Blöcke sinnvoll (siehe Beispiel oben).

jahr = input("Gib dein Geburtsjahr ein:")
 
if jahr >= 2010:
    print("Du bist Teil der Generation Alpha.")
elif jahr >= 1995:
    print("Du bist Teil der Generation Z.")
elif jahr >= 1980:
    print("Du bist Teil der Generation Y.")
elif jahr >= 1965:
    print("Du bist Teil der Generation X.")
else:
    print("Du bist alt.")

Aufgabe E12

  1. Zeichne ein Flussdiagramm zu folgendem Code. Beschrifte die Blöcke sinnvoll (siehe Beispiel oben). Den repeat-Block kannst du als einen Befehl zeichnen.
  2. Überlege, was der Code genau macht und wie die Figur aussieht, die bei einer bestimmten Eingabe gezeichnet wird. Prüfe, ob deine Überlegung stimmt, indem du den Code in webtigerpython ausführst.
from gturtle import *
 
morla = Turtle()
 
anzahl = input("Wie viele Kreise? (2-8)")
 
if anzahl > 8:
    print("Eingabe ungültig. Es werden 8 Figuren gezeichnet.")
    anzahl = 8
elif anzahl < 2:
    print("Eingabe ungültig. Es werden 2 Figuren gezeichnet.")
    anzahl = 2
 
morla.right(90)
 
repeat anzahl:
    morla.rightArc(20,360)
    morla.forward(40)

Race

  1. Zeichne mit Turtle eine eigene Map mit einer Rennbahn und weiteren Elementen (Gewässer, Bäume, Häuser, Menschen, …). Verwende für diesen Teil den .hideTurtle() Befehl, damit die Map sofort gezeichnet ist.
  2. Zeige nachher die Turtle wieder an mit .showTurtle() und lasse die Turtle auf der Rennbahn Runden drehen. Mit repeat: kann ein Code unendlich oft wiederholt werden.

Beispiel:

Achtung: Meist gibt es mehrere Lösungen. Nur weil deine Lösung anders ist als diejenige in den Musterlösungen unten, bedeutet dies nicht, dass deine nicht richtig/gut ist. Sende oder zeige im Zweifelsfall deine Lösung der Lehrperson.

Lösungen A

Lösungen B

Lösungen C

Lösungen D

Lösungen E


1)
befindet sich oberhalb der Shift-Taste, ganz links, vierte Reihe von unten
  • gf_informatik/programmieren_i_gra.txt
  • Zuletzt geändert: 2025-04-19 07:52
  • von gra