@PatrickF: Naja, es wird ja nicht wirklich der Canvas verlassen, der ist ”unendlich” gross, sondern der Viewport. Du kannst nach jedem Schritt die Screensize abfragen und die Turtle-Position und prüfen ob die noch im Bereich von minus der halben Breite und der halben Breite ist und minus halbe Höhe und halbe Höhe, denn der Startpunkt 0,0 der Turtle ist in der Mitte vom Viewport.
Sonstige Anmerkungen: Die Modulnamen sollten nicht kryptisch abgekürzt werden. Bei den letzten Zeilen hast Du das auch vergessen, da wird `turtle` zu einer Ausnahme führen.
Wobei diese letzten beiden Zeilen Unsinn sind, denn bei 10 Milliarden Schleifendurchläufen und mindestens 1 Millisekunde pro Durchlauf ist diese Schleife nach fast 116 Tagen Laufzeit erst am Ende. Real noch länger wenn man tatsächlich eine Vektorgrafik mit 10 Milliarden Linien erstellen könnte, was praktisch deutlich früher in einem Speicherproblem enden wird. Also kann man da einfach eine Endlosschleife schreiben bis es halt kracht. Wenn man so etwas tatsächlich ”endlos” laufen lassen möchte, mit konstantem Speicherverbrauch und konstanter CPU-Last, darf man keine Vektorgrafik verwenden, sondern muss das pixelbasiert machen.
Das `weite` sollte wohl `breite` heissen. `rotate` sollte eher `angle` heissen. Und nicht von 0 bis 360 gehen, denn damit ist ein Winkel mit 0 und 360 zweimal vertreten, im Gegensatz zu allen anderen ganzzahligen Winkeln. Denn ob man sich 0 Grad oder 360 Grad dreht, kommt ja beides auf die gleiche Richtung hinaus.
Aus den Farben wählt man besser mit `random.choice()` aus.
Der Name `penstate` wird im gleichen Kontext mal an eine Zahl und mal an eine Zeichenkette gebunden. Man sollte Namen nicht so wiederverwenden, das ist verwirrend.
Es ist mir auch nicht ganz klar nach welchem Kriterium die 1 beim Vergleich ausgewählt wurde. Warum nicht 0, 2, 3, oder 4? Ich hätte da ja die 0 genommen, einfach weil es die erste ist. Beziehunsgweise den Code so geändert, das man mit `bool()` und gegebenenfalls ``not`` aus `penstate` einen Wahrheitswert macht. Wenn man den `pendown` nennt, hätte man den gleichen Namen den man mit der `pen()`-Funktion als Schlüsselwortargument setzen kann.
Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
import random
import turtle
from itertools import count
FARBEN = ["black", "goldenrod", "green", "maroon", "turquoise", "white"]
BREITE = HOEHE = 500
def main():
turtle.speed(0)
turtle.bgcolor("black")
turtle.screensize(BREITE, HOEHE)
for i in count():
turtle.forward(random.randint(1, 20))
turtle.color(random.choice(FARBEN))
turtle.right(random.randint(0, 359))
pendown = bool(random.randint(0, 5))
turtle.pen(pendown=pendown)
print(f"Durchgang {i}, Pen: {'unten' if pendown else 'oben'}")
if __name__ == "__main__":
main()