Seite 1 von 1

Hallo, weiß jemand was an diesem Code falsch ist?

Verfasst: Samstag 15. Januar 2022, 12:50
von Noah1379
Hallo, weiß jemand was an diesem Code falsch ist? :?:

Code: Alles auswählen

import turtle
from itertools import cycle

colors = cycle(['red', 'orange', 'yellow', \ 'green', 'blue', 'purple'])

def draw_circle(size, angle, shift):
    turtle.pencolor(next(colors))
    turtle.circle(size)
    turtle.right(angle)
    turtle.forward(shift)
    draw_circle(size + 5, angle + 1, shift + 1)


turtle.bgcolor('black')
turtle.speed('fast')
turtle.pensize(4)
draw_circle(30, 0, 1)
Wenn ich den Code ausführe kommt die Fehlermeldung:
"unexpected character after line continuation character" und die letzte Klammer in Zeile 4 wird markiert.
Ich bin neu in Python und würde mich über eine Antwort freuen. :)

Re: Hallo, weiß jemand was an diesem Code falsch ist?

Verfasst: Samstag 15. Januar 2022, 13:02
von Noah1379
Ich habe den Fehler gefunden.
/ war falsch.

Re: Hallo, weiß jemand was an diesem Code falsch ist?

Verfasst: Samstag 15. Januar 2022, 13:04
von Sirius3
Naja, die Fehlermeldung sagt es ja eindeutig. In Zeile 4 macht das Zeilenfortsetzungszeichen \ keinen Sinn, weil danach noch Text steht. Das ist das Problem an Zeilenfortsetzung, dass wirklich KEIN Zeichen folgen darf.

Re: Hallo, weiß jemand was an diesem Code falsch ist?

Verfasst: Samstag 15. Januar 2022, 16:42
von __blackjack__
@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()