Wie mache ich geschachtelte Polygone in Python?

2 Antworten

Die ersten zwei for-loops kannst du weglassen, der eine malt einen Würfel und der andere ein Dreieck, die brauchst du nicht.

Und bei deinem dritten, der wichtig ist, machst du halt immer nur

turtle.right(60)

deswegen malt es dir hundert mal die selbe Figur. 60 Grad ergibt immer ein 6-Eck, da 360/60 = 6, er kann sich also 6 mal drehen bis er wieder am start ist, macht also 6 Linien. Du erhöhst die Eckenzahl zwar, verwendest sie jedoch nicht.

Um welchen Winkel sich der Turtle dreht muss abhängig von der Eckenzahl sein. Wenn man etwas nachdenkt kommt man auf einen Winkel von 360/eckenzahl. (Siehe Rechnung im letzten Absatz)

So ist der Code richtig:

import turtle
turtle.speed(2)
eckenzahl=4

for shape in range(10):
    for edge in range(eckenzahl):
        turtle.forward(100)
        turtle.right(360/eckenzahl)
    eckenzahl=eckenzahl+1 #Anzahl der Polygone wird um 1 erhöht

Du kannst natürlich den äußeren For-Loop direkt für die Eckenanzahl verwenden, dann musst du sie nicht selbst anlegen und erhöhen.
Credit: ralphdieter`s Antwort.

import turtle
turtle.speed(2)

for eckenzahl in range(4, 11):
    for edge in range(eckenzahl):
        turtle.forward(100)
        turtle.right(360/eckenzahl)
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
for i in range(4):       #   4 = Eckenzahl
    turtle.forward(100)  # 100 = Seitenlänge (konstant)
    turtle.right(90)     #  90 = Innenwinkel

Das ergibt ein Viereck. Schön ist, dass die Kröte danach wieder an der Ausgangsposition sitzt und in die gleiche Richtung schaut. Du könntest die 4 durch die Variable eckenzahl ersetzen. Die Seitenlänge bleibt immer 100, aber der Winkel ändert sich mit der Eckenzahl. Die allgemeine Formel dafür ist 360/eckenzahl.

________

for i in range(3):
    turtle.left(120)
    turtle.back(100)

Das zeichnet ein Dreieck. Wozu denn?

________

for s in range(100):
        ...
        eckenzahl=eckenzahl+1 #Anzahl der Polygone wird um 1 erhöht

Eine Schleife ist ja schon mal gut. Aber wozu brauchst Du s? Nimm doch gleich eine Schleife mit eckenzahl in range(4, 11). Dann versteht man den Code besser.

Und in diese Schleife kannst Du nun die verallgemeinerte Schleife von oben einbauen. Alles klar?

Schachpapa  12.11.2022, 09:43
Schön ist, dass die Kröte danach wieder an der Ausgangsposition sitzt und in die gleiche Richtung schaut.

So sollte es zumindest sein. Ich könnte mir vorstellen, dass das mit zunehmender Eckenzahl durch Rundungsfehler nicht mehr gegeben ist.

Wenn es also ungenau wird, würde ich Startpunkt und -richtung jedes Mal neu setzen.

0
PandaBear02 
Fragesteller
 12.11.2022, 16:34

Danke für die Hilfe erstmal, nur weiß ich nicht wofür range(4,11)steht...ich könnt mir vorstellen, dass die 4 sich auf die Seiten, des Vierecks bezieht, aber die 11 weiß ich nicht.

0
ralphdieter  12.11.2022, 19:37
@PandaBear02

range(100) zählt von 0 bis 99.
range(4, 11) zählt von 4 bis 10.
range(1, 20, 5) zählt von 1 bis unter 20 in Fünferschritten (1, 6, 11, 16).

Aber ich habe mich verzählt: Das äußerte Vieleck in Deinem Bild hat 13 Ecken. Also

for eckenzahl in range(4, 14):

1