Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
lehrkraefte:snr:informatik:glf22:python:rekursion [2022/12/21 15:57] Olaf Schnürer [Aufgabe: Animation der obigen Objekte - "Filmchen drehen"] |
lehrkraefte:snr:informatik:glf22:python:rekursion [2022/12/23 12:14] Olaf Schnürer [Baum-Programm aus Lektion] |
||
---|---|---|---|
Line 7: | Line 7: | ||
<WRAP center round todo 100%> | <WRAP center round todo 100%> | ||
Gemeinsames angeleitetes Programmieren: | Gemeinsames angeleitetes Programmieren: | ||
+ | |||
+ | <hidden Anweisung für Lehrer:> | ||
+ | Sukzessive die Funktionen '' | ||
+ | Alle Funktionen haben die aktuelle Streckenlänge als Parameter '' | ||
+ | </ | ||
{{: | {{: | ||
Line 31: | Line 36: | ||
exitonclick() | exitonclick() | ||
+ | |||
+ | # Um die Zeichung schneller erscheinen zu lassen, | ||
+ | # gibt es den folgenden Trick: | ||
+ | # Ersetze die Zeile '' | ||
+ | # und ergänze in der Zeile vor '' | ||
+ | # also nach allen Zeichenbefehlen, | ||
</ | </ | ||
- | Experimentiere: | + | Experimentiere: |
+ | * Für welche Verzweigungswinkel kommt eine besonders schöne Figur heraus? | ||
+ | * Nimm statt 3 Verzweigungen eine andere Zahl von Verzweigungen. | ||
+ | * Zeichne jede der Verzweigungen unterschiedlich lang. | ||
+ | * Variiere die Winkel bei den rekursiven Aufrufen; nett ist es beispielsweise, | ||
+ | * Wer will, kann auch bereits hier eine Schleife über gewisse Verzweigungswinkel laufen lassen (auch wenn das eigentlich erst unten in der Animationsaufgabe vorgeschlagen wird...) | ||
+ | * Sei kreativ! | ||
</ | </ | ||
Line 48: | Line 65: | ||
<WRAP center round todo> | <WRAP center round todo> | ||
- | Schreibe eine rekursive Funktion, die je nach " | + | Schreibe eine rekursive Funktion, die je nach " |
{{: | {{: | ||
Line 64: | Line 81: | ||
SEITENLAENGE = 400 | SEITENLAENGE = 400 | ||
- | def linienzug(level, a): | + | def kochkurve(level, a): |
+ | # " | ||
+ | # die Schildkröte NICHT zurück zum Ausgansgspunkt geht (wie beim Baum oben). | ||
+ | # Bei allen " | ||
+ | # der Turtle bis zu ihrem Endpunkt genau a Pixel betragen. | ||
print(' | print(' | ||
def schneeflocke(level, | def schneeflocke(level, | ||
+ | # Verwende die Funktion " | ||
print(' | print(' | ||
Line 90: | Line 112: | ||
<WRAP center round todo> | <WRAP center round todo> | ||
Animiere die Objekte, die wir oben gezeichnet haben: | Animiere die Objekte, die wir oben gezeichnet haben: | ||
- | * Zeichne nacheinander den Baum für verschiedene Verzweigungswinkel, | + | * Zeichne nacheinander den Baum für verschiedene Verzweigungswinkel, |
* Lass die Kochsche Schneeflocke rotieren. | * Lass die Kochsche Schneeflocke rotieren. | ||
- | Verstehe dazu das unten angegebene | + | Verstehe dazu eines der unten angegebenen |
- | {{: | + | Die wichtigen Befehle in diesen Programmen sind '' |
- | {{:lehrkraefte:snr: | + | |
+ | <hidden Animations-Beispielprogramm (einfache Variante)> | ||
+ | < | ||
+ | from turtle import * | ||
+ | from time import * | ||
+ | |||
+ | def abbruch(x=0, | ||
+ | global aktiv | ||
+ | aktiv = False | ||
+ | |||
+ | leinwand = Screen() | ||
+ | tracer(n=0) | ||
+ | hideturtle() | ||
+ | |||
+ | for radius in range(-200, 201): | ||
+ | clear() | ||
+ | circle(radius) | ||
+ | update() | ||
+ | sleep(0.01) | ||
+ | </ | ||
+ | </ | ||
+ | <hidden Animations-Beispielprogramm (kompliziertere Variante, Animation läuft bis zum Abbruch per Mausklick oder Tastendruck)> | ||
<code python animierter-kreis-abbruch-per-click-oder-tastendruck.py> | <code python animierter-kreis-abbruch-per-click-oder-tastendruck.py> | ||
from turtle import * | from turtle import * | ||
Line 125: | Line 168: | ||
sleep(0.01) | sleep(0.01) | ||
</ | </ | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | |||
</ | </ | ||
Vielleicht ganz nett, falls jemand Spass am Python-Programmieren bekommen hat: [[https:// | Vielleicht ganz nett, falls jemand Spass am Python-Programmieren bekommen hat: [[https:// | ||
+ | ====== Baum-Programm aus Lektion ====== | ||
+ | |||
+ | <code python baum.py> | ||
+ | from turtle import * | ||
+ | |||
+ | STAMMLAENGE = 380 | ||
+ | |||
+ | def ast0(a): | ||
+ | forward(a) | ||
+ | backward(a) | ||
+ | |||
+ | def ast1(a, winkel): | ||
+ | forward(a) | ||
+ | |||
+ | left(winkel) | ||
+ | ast0(a/2) | ||
+ | right(winkel) | ||
+ | ast0(a/2) | ||
+ | right(winkel) | ||
+ | ast0(a/2) | ||
+ | left(winkel) | ||
+ | |||
+ | backward(a) | ||
+ | |||
+ | def ast2(a, winkel): | ||
+ | forward(a) | ||
+ | |||
+ | left(winkel) | ||
+ | ast1(a/2, winkel) | ||
+ | right(winkel) | ||
+ | ast1(a/2, winkel) | ||
+ | right(winkel) | ||
+ | ast1(a/2, winkel) | ||
+ | left(winkel) | ||
+ | |||
+ | backward(a) | ||
+ | |||
+ | def ast(level, a, winkel): | ||
+ | if level == 0: | ||
+ | forward(a) | ||
+ | backward(a) | ||
+ | else: | ||
+ | forward(a) | ||
+ | |||
+ | left(winkel) | ||
+ | ast(level - 1, a/2, winkel) | ||
+ | right(winkel) | ||
+ | ast(level - 1, a/2, winkel) | ||
+ | right(winkel) | ||
+ | ast(level - 1, a/2, winkel) | ||
+ | left(winkel) | ||
+ | |||
+ | backward(a) | ||
+ | |||
+ | speed(0) | ||
+ | # hideturtle() | ||
+ | penup() | ||
+ | left(90) | ||
+ | backward(STAMMLAENGE) | ||
+ | pendown() | ||
+ | ast(6, STAMMLAENGE, | ||
+ | |||
+ | exitonclick() | ||
+ | |||
+ | # Um die Zeichung schneller erscheinen zu lassen, | ||
+ | # gibt es den folgenden Trick: | ||
+ | # Ersetze die Zeile '' | ||
+ | # und ergänze in der Zeile vor '' | ||
+ | # also nach allen Zeichenbefehlen, | ||
+ | </ | ||