Seite 1 von 1

Funktion zum angleichen eines Winkels in einem Polygon

Verfasst: Donnerstag 26. Februar 2015, 09:10
von Aratosh
Ich bin gerade dabei ein Programm zu schreiben welches ein Polygon zeichnet. Um den übergebenen Radius dahingehend anzupassen dass das Polygon am ende exakt 360° ergibt verwende ich eine einfache Rekursionsfunktion.

Code: Alles auswählen

def three_sixty(degrees):
    if 360 % degrees == 0:
        return degrees
    else:
        three_sixty(degrees + 1)
Nun habe ich jedoch folgendes Problem. Ich habe mir den Datentyp und den Wert von degrees in der Funktion selbst anzeigen lassen (im else zweig bei Übergabe typ int wert 35, im if Zweig nach durchlauf der Rekursion Typ int Wert 36) bis dahin funktioniert alles wie geplant. Jedoch nach der Rückgabe in die Main Funktion erhalte ich bei aufruf von print three_sixty(35) den Wert None.

Wäre freundlich wenn mir jemand die Ursache des Problems schildern könnte und wie es zu beheben ist.

Re: Funktion zum angleichen eines Winkels in einem Polygon

Verfasst: Donnerstag 26. Februar 2015, 09:29
von Sirius3
@Aratosh: der else-Zeigt gibt nichts zurück, und damit implizit None.

Was machst Du, wenn degrees keine ganze Zahl ist? Versuche doch eine geschlossene Formel zu finden, statt rekursiv zu suchen. Tipp: was sind die Teiler von 360?

Re: Funktion zum angleichen eines Winkels in einem Polygon

Verfasst: Donnerstag 26. Februar 2015, 10:30
von Aratosh

Code: Alles auswählen

def three_sixty(degrees):
    while 360 % degrees != 0:
        degrees += 1

    return degrees
Hab das Problem jetzt so gelöst, weiss nicht genau wie du meinst, wenn ich eine konkretes Skript verwende dann würde mir nur eine Lösung mit einer vordefinierten Liste einfallen und dann müsste ich immernoch auf den nächst höheren beziehungsweise niedrigeren Wert prüfen was die Funktion meiner Meinung nach um einiges komplizierter machen würde, bin aber gern für Vorschläge offen.

Re: Funktion zum angleichen eines Winkels in einem Polygon

Verfasst: Freitag 27. Februar 2015, 14:08
von nezzcarth
Dein Code hat allerdings den Nachteil, dass er für Werte > 360 nicht terminiert. Willst du tatsächlich einfach nur einen einzelnen Winkel anpassen, bis er ein ganzzahliger Teiler von 360 ist, oder was genau hast du vor? Polygone haben ja i.d.R. mindestens drei Winkel und entsprechende, abhängige Innenwinkelsummen.