gleiche Schleife - verschiedene Bedingungen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 871
Registriert: Sonntag 19. September 2021, 09:40

Ich hoffe, ihr sagt mir nicht wieder, es sei doch ganz einfach und stünde in den Docs - möglicherweise geht es aber auch gar nicht?
Ich habe dreimal die gleiche Schleife, diese muss aber, je nach Vorgabe, unter bestimmten Bedingungen ablaufen:

Code: Alles auswählen

            if typ3 == 1:                                                        #Spiegelachse ist Winkelhalbierende
                x0 = 0
                y0 = 0
                #hier kommt das Dreieck:
                while x1 + breite > h_breite/20 -3 or y1 + hoehe > h_hoehe/20 -6 :
                    x1 = random.randint(4,12)
                    y1 = random.randint(1,12) 
                    breite = random.randint(2,6)
                    hoehe = random.randint(2,6)
            elif typ3 == 2:                                                        #Spiegelachse parallel zur y-Achse
                x0 = random.randint(4,7)
                y0 = 0
                #hier kommt das Dreieck:
                while x1 + breite > h_breite/20 -3 or y1 + hoehe > h_hoehe/20 -6 or x1 - x0 > x0 + x_null/20:
                    x1 = random.randint(4,12)
                    y1 = random.randint(1,12) 
                    breite = random.randint(2,6)
                    hoehe = random.randint(2,6)
            elif typ3 == 3:                                                        #Spiegelachse parallel zur x-Achse
                x0 = 0
                y0 = random.randint(4,7)
                #hier kommt das Dreieck:
                while x1 + breite > h_breite/20 -3 or y1 + hoehe > h_hoehe/20 -6 or y1 - y0 > y0 + y_null/20:
                    x1 = random.randint(4,12)
                    y1 = random.randint(1,12) 
                    breite = random.randint(2,6)
                    hoehe = random.randint(2,6)
geht das auch einfacher? Wenn ich aus der Konstruktion des Dreiecks eine eigene Funktion erstelle, muss ich ja immer die ganzen Parameter mit übergeben, das steht doch nicht im Verhältnis?
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Doch, das steht im Verhältnis. Bau einfach eine Funktion & ruf die auf.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Benutze sprechende Variablennamen. Was soll das 3 an typ3? Was bedeutet h_ bei h_breite und h_hoehe? Was unterscheidet diese Breite von der anderen Breite?
Kommentare sind dazu da, zu erklären, warum man etwas macht, den Kommentar dann irgendwo rechts außen zu verstecken ist da Kontraproduktiv.
Je nachdem, was x_null ist, implizierte die Bedingung bei typ3 == 2 den Fall x0 = 0.
Damit vereinfachen sich die drei if-Blöcke zu einem:

Code: Alles auswählen

if typ3 == 1:
    # Spiegelachse ist Winkelhalbierende
    x0 = 0
    y0 = 0
elif typ3 == 2:
    # Spiegelachse parallel zur y-Achse
    x0 = random.randint(4, 7)
    y0 = 0
elif typ3 == 3:
    # Spiegelachse parallel zur x-Achse
    x0 = 0
    y0 = random.randint(4, 7)
else:
    raise AssertionError("typ3 ungültig")
# hier kommt das Dreieck:
while x1 + breite > h_breite / 20 - 3 or x1 - 2 * x0 > x_null / 20:
    x1 = random.randint(4, 12)
    breite = random.randint(2, 6)
while y1 + hoehe > h_hoehe / 20 - 6 or y1 - 2 * y0 > y_null / 20:
    y1 = random.randint(1, 12)
    hoehe = random.randint(2, 6)
Antworten