Funktion zum angleichen eines Winkels in einem Polygon

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
Aratosh
User
Beiträge: 2
Registriert: Donnerstag 26. Februar 2015, 08:31

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.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@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?
Aratosh
User
Beiträge: 2
Registriert: Donnerstag 26. Februar 2015, 08:31

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.
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

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.
Antworten