@Noah1379: Anmerkungen zum Quelltext: Rekursion ist kein Ersatz für normale, einfache Schleifen. Insbesondere in diesem Fall, wo das eine Endlosschleife wäre, wird die Rekursion unweigerlich in einen Programmabbruch laufen weil die Rekursionsgrenze erreicht wird.
Funktionen bekommen alles was sie ausser Konstanten brauchen, als Argument(e) übergeben. `colors` ist keine Konstante, weil sich der Zustand des Objekts verändert, jedes mal wenn `next()` damit aufgerufen wird, also muss das auch ein Argument von `draw_circle()` sein.
Um solchen globalen Variablen gar nicht erst aufkommen zu lassen, steht auch das Hauptprogramm üblicherweise in einer Funktion die per Konvention `main()` heisst. Auf Modulebene steht dann nur Code der Konstanten, Funktionen, und Klassen definiert.
Das Programm sähe dann so aus:
Code: Alles auswählen
#!/usr/bin/env python3
import turtle
from itertools import cycle
def draw_circle(size, angle, shift, color):
turtle.pencolor(color)
turtle.circle(size)
turtle.right(angle)
turtle.forward(shift)
def main():
colors = cycle(["red", "orange", "yellow", "green", "blue", "purple"])
turtle.bgcolor("black")
turtle.speed("fast")
turtle.pensize(4)
size = 30
angle = 0
shift = 1
for color in colors:
draw_circle(size, angle, shift, color)
size += 5
angle += 1
shift += 1
if __name__ == "__main__":
main()