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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Noah1379
User
Beiträge: 6
Registriert: Freitag 14. Januar 2022, 21:11
Wohnort: Düsseldorf

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. :)
Noah1379
User
Beiträge: 6
Registriert: Freitag 14. Januar 2022, 21:11
Wohnort: Düsseldorf

Ich habe den Fehler gefunden.
/ war falsch.
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten