Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ~~NOTOC~~ <!--====== Achtung ====== <WRAP center round important> Don't name your turtle program "turtle.py"! If there is any file in your python folder with this name, rename or delete it!((Otherwise importing the turtle library will not work!)) </WRAP> --> ====== Turtle-Grafik ====== <WRAP center round info> Turtle-Grafik meint, dass man mit einer "Turtle" (alias Schildkröte), die über den Bildschirm "läuft", eine Zeichnung anfertigt. Man kann dieser Turtle Befehle wie "Gehe 100 Pixel vorwärts!" oder "Drehe dich um 30 Grad nach rechts!" geben. Die Turtle zeichnet mit einem Stift, den sie auf Befehl anhebt bzw. absenkt. </WRAP> ===== Haus des Nikolaus auf Papier ===== <WRAP center round todo> Der folgende Pseudocode lässt die Turtle ein Quadrat der Seitenlänge ''a = 100'' zeichnen: <code text> a = 100 Gehe um a Pixel vorwärts! Drehe dich um 90 Grad nach links! Gehe um a Pixel vorwärts! Drehe dich um 90 Grad nach links! Gehe um a Pixel vorwärts! Drehe dich um 90 Grad nach links! Gehe um a Pixel vorwärts! </code> Zeichne das Haus des Nikolaus ohne Abzusetzen auf ein Blatt Papier. Übersetze deine Zeichnung in Pseudocode für die Turtle und schreibe diesen auf. Nimm dabei an, dass die Turtle anfangs nach rechts schaut. </WRAP> ===== Turtle-Befehle kennenlernen ===== <WRAP center round todo> Das folgende Programm vermittelt dir die wichtigsten Turtle-Befehle. Wenn du willst, kannst du es abspeichern und z. B. in Visual Studio Code laufen lassen. <!-- Bevor du es laufen lässt: Lies das folgende Programm durch und versuche herauszufinden, was gezeichnet wird. Teste dann deine Vorhersage und verstehe, was jeder einzelne Befehl bewirkt. Dazu kannst du gerne einige Befehle und werte verändern. speed(1) # Optionaler Befehl, setzt die Geschwindigkeit der Turtle. # Slowest animated speed ist 1; fastest animated speed is 10; # even faster is speed 0, but then the turtle "jumps" instead of moving smoothly. shape("turtle") # Optionaler Befehl, sorgt dafür, dass das zeichnende Gebilde # wie eine Schildkröte aussieht. Alternativen sind "arrow", # "circle", "square", "triangle", "classic". --> <code python turtle-grundbefehle.py> from turtle import * # Importiert die Turtle-Befehle a = 100 forward(a) left(90) pensize(10) forward(3 * a) right(90) pencolor("blue") forward(a) left(90) penup() backward(3 * a) pendown() forward(2 * a) exitonclick() # Sorgt dafür, dass das Zeichenfenster nicht sofort nach dem Zeichnen geschlossen wird, # sondern erst nach Anklicken des Zeichenfensters. </code> </WRAP> ===== Haus des Nikolaus auf dem Bildschirm: Pseudocode in Python-Programm verwandeln ===== <WRAP center round todo> Schreibe nun ein neues Programm, das das Haus des Nikolaus **mit Grundseite der Länge** ''a'' zeichnet (ohne Abzusetzen soll jede Linie nur einmal gezeichnet werden). Die Variable ''a'' soll am Anfang des Programms durch ''a = 100'' definiert werden. Wenn man später den Wert der Variablen ''a'' verändert, soll sich die Grösse der Zeichnung entsprechend ändern! Das Dach soll rot gezeichnet werden, der Rest in einer anderen Farbe deiner Wahl, die Stiftdicke soll 10 betragen. Empfehlung: Speichere die Länge der Diagonalen in einer Variablen ''d''. <hidden Hinweis: Wie man Wurzel zwei in Python eingibt.> Für eine genaue Zeichnung benötigst du $\sqrt{2}=2^{0.5}$, was du in Python per ''2**0.5'' erhältst. </hidden> {{:lehrkraefte:snr:informatik:glf22:python:nikolaus.png?nolink&200 |}} </WRAP> ===== $n$-Eck zeichnen ===== <WRAP center round todo> Ergänze das folgende Programm so, dass ein ''n''-Eck der Seitenlänge ''a'' gezeichnet wird. Teste dein Programm, indem du die Werte von ''n'' und ''a'' änderst. {{:lehrkraefte:snr:informatik:glf22:python:7-eck.png?nolink&200 |}} <hidden Hinweis> Verwende eine while-Schleife. In jedem Schleifendurchlauf wird eine Seite des $n$-Ecks gezeichnet und die Turtle dreht sich um den richtigen Winkel. </hidden> <hidden Hinweis zum Drehwinkel nach jeder Vorwärtsbewegung> Um welchen Winkel hat sich die Turtle insgesamt gedreht, wenn sie das gesamte $n$-Eck gezeichnet hat und wie am Anfang ausgerichtet dasteht? <hidden Antwort> Einmal um die eigene Achse, also um $360^\circ$. Da sie sich $n$-mal um denselben Winkel gedreht hat, dreht sie sich nach <hidden jeder Vorwärtsbewegung um ...> $\frac{360^\circ}n$ </hidden> </hidden> </hidden> <code python> from turtle import * n = 7 a = 100 </code> </WRAP> ===== Spirale zeichnen ===== <WRAP center round todo> Schreibe ein Python-Programm, das eine "quadratische Spirale" mit der Turtle zeichnet, und zwar von innen beginnend: Die kleinste Seite soll ''a'' lang sein, die Seitenlänge soll jeweils um ''10'' wachsen und es sollen ''anzahl'' Linien gezeichnet werden. Beispielsweise soll für ''a = 30'' und ''anzahl = 20'' die folgende Zeichnung entstehen. <hidden Hinweis> Verwende eine while-Schleife, die ''anzahl'' Mal durchlaufen wird. In jedem Schleifendurchlauf wird eine Linie der Länge ''a'' gezeichnet. Die Variable ''a'' ist so anzupassen, dass die Linienlänge jeweils um 10 grösser wird. Du kannst auch das obige $n$-Eck-Programm (für $n=4$) geeignet veändern. </hidden> <WRAP center round box 100%> {{:lehrkraefte:snr:informatik:glf22:python:spirale.png?nolink&200 |}} </WRAP> Bonus: * Kannst du am Ende die Gesamtlänge der gezeichneten Spirale ausgeben? (im normalen Terminal per ''print(...)'') * Ändere dein Programm so, dass die folgenden Bilder gezeichnet werden ("Sechseck-Spirale" und "leicht verdrehte" Version davon). <WRAP center round box 100%> {{:lehrkraefte:snr:informatik:glf22:python:sechseck-spirale.png?nolink&200 |}} {{:lehrkraefte:snr:informatik:glf22:python:sechseck-spirale-verdreht.png?nolink&200 |}} </WRAP> </WRAP> <!-- <WRAP center round todo> Es folgen 5 von der Idee her jeweils gute, aber leider syntaktisch fehlerhafte Programme zum Zeichnen der Spirale wie oben gefordert (dreimal mit for-Schleife, zweimal mit while-Schleife). Korrigiere diese Programme "im Sinne des Autors" und löse gegebenenfalls die Zusatzaufgaben! - {{ :lehrkraefte:snr:informatik:glf22:python:spirale-mit-for-fehlerhaft-1.py |}} (gut wäre auch eine andere Dateinamenserweiterung ...) - {{ :lehrkraefte:snr:informatik:glf22:python:spirale-mit-for-fehlerhaft-2.py |}} - {{ :lehrkraefte:snr:informatik:glf22:python:spirale-mit-for-fehlerhaft-3.py |}} - {{ :lehrkraefte:snr:informatik:glf22:python:spirale-mit-while-fehlerhaft-1.py |}} - {{ :lehrkraefte:snr:informatik:glf22:python:spirale-mit-while-fehlerhaft-2.py |}} </WRAP> --> ====== Bonus-Material ====== <!-- Such dir aus den folgenden Aufgaben heraus, was dir gefällt! --> <WRAP center round todo> Male eine nette Zeichnung deiner Wahl mit der Turtle! </WRAP> <WRAP center round todo> Male ein Herz! Hinweis: Nützliche Befehle findest du hier: https://fginfo.ksbg.ch/dokuwiki/doku.php?id=lehrkraefte:snr:informatik:glf22:python:turtle#herz_zeichnen </WRAP> <WRAP center round todo> Male eine dreidimensionales Haus (des Nikolaus)! </WRAP> ===== Wer mehr wissen will ===== Weitere Befehle (etwa ''setposition()'', ''hideturtle()'', ''showturtle()'', ''write(...)'') werden in der offiziellen Dokumentation der Turtle-Bibliothek erklärt: https://docs.python.org/3/library/turtle.html Wem die Turtle zu langsam zeichnet: ''tracer(0, 0)'' vor allen Zeichnebefehlen, ''update()'' am Ende (oder zwischendurch) zum Anzeigen. Welche Farbwörter man verwenden darf, findet man hier: https://www.tcl.tk/man/tcl8.4/TkCmd/colors.html ===== Link zur Kursseite ===== [[lehrkraefte:snr:informatik:glf23|Zur Kursseite]] lehrkraefte/snr/informatik/glf23/python/turtle.txt Last modified: 2023/11/08 09:35by Olaf Schnürer