Dinge, die zusammengehören, sollten auch beieinander stehen. Du definierst winkel und n, die in der while-Schleife gebraucht werden, dazwischen werden dann aber noch parameter und center_x definiert, die nichts mit der Schleife zu tun haben.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 4 und mal 2.
Wenn man das nur etwas anders anordnet, wird alles gleich viel klarer:
Code: Alles auswählen
radius = 60
center_y = 60
center_x = 100
center_x2 = 250
winkel = [[0,"LightSkyBlue"]]
n = 1
while n < nenner_1:
if n < zaehler_1:
item = (int(n * 360 / nenner_1), "LightSkyBlue")
else:
item = (int(n * 360 / nenner_1), None)
winkel.append(item)
n +=1
winkel2 = [[0, "LightSkyBlue"]]
n = 1
while n < nenner_2:
if n < zaehler_2:
item = (int(n * 360 / nenner_2), "LightSkyBlue")
else:
item = (int(n * 360 / nenner_2), None)
winkel2.append(item)
n +=1
parameter = {
'name': 'svg/winkel.svg',
'object': 'rechnung',
'winkel': winkel,
"center_x2" : center_x2,
'winkel2': winkel2
}
koordinaten = {
"center_x": center_x,
"center_y": center_y,
"radius": radius,
"sweep_flag": 1,
**segment(center_x, center_y, radius, 360/nenner_1),
**segment(center_x2, center_y, radius, 360/nenner_2, 2),
}
if stufe % 2 == 1:
hilfe_id = 31
else:
# Hauptnenner (wird nur für G-Kurs angezeigt)
hilfe_id = 32
winkel3 = [[0, None]]
n = 1
while n < kgv:
item = (int(n*360/kgv), None)
winkel3.append(item)
n +=1
koordinaten.update(segment(center_x, center_y, radius, 360/kgv, 3))
parameter['winkel3'] = winkel3
Jetzt hat es da viel kopierten Code, den man besser in Funktionen auslagert und die while-Schleife wäre besser eine for-Schleife. Der Fall n=0 ist gar kein Spezielfall!
Code: Alles auswählen
def winkel_erzeugen(nenner, zaehler, farbe):
winkel = []
for n in range(nenner):
winkel.append((
int(n * 360 // nenner),
farbe if n < zaehler else None
))
return winkel
...
radius = 60
center_y = 60
center_x = 100
center_x2 = 250
parameter = {
'name': 'svg/winkel.svg',
'object': 'rechnung',
'winkel': winkel_erzeugen(nenner_1, zaehler_1, "LightSkyBlue"),
"center_x2" : center_x2,
'winkel2': winkel_erzeugen(nenner_2, zaehler_2, "LightSkyBlue")
}
koordinaten = {
"center_x": center_x,
"center_y": center_y,
"radius": radius,
"sweep_flag": 1,
**segment(center_x, center_y, radius, 360/nenner_1),
**segment(center_x2, center_y, radius, 360/nenner_2, 2),
}
if stufe % 2 == 1:
hilfe_id = 31
else:
# Hauptnenner (wird nur für G-Kurs angezeigt)
hilfe_id = 32
koordinaten.update(segment(center_x, center_y, radius, 360/kgv, 3))
parameter['winkel3'] = winkel_erzeugen(kgv, 0, "LightSkyBlue")
Wenn man aber Deine Ausgabe anschaut, dann gibt es gar keine zwei Wörterbücher `parameter` und `koordinaten`?!?! Warum sind die dann in Deinem Code?
Dadurch wird der Code ja nochmal um einiges klarer und systematischer:
Code: Alles auswählen
parameter = {
'name': 'svg/winkel.svg',
'object': 'rechnung',
"sweep_flag": 1,
"radius": radius,
"center_y": center_y,
"center_x": center_x,
'winkel': winkel_erzeugen(nenner_1, zaehler_1, "LightSkyBlue"),
**segment(center_x, center_y, radius, 360/nenner_1),
"center_x2" : center_x2,
'winkel2': winkel_erzeugen(nenner_2, zaehler_2, "LightSkyBlue")
**segment(center_x2, center_y, radius, 360/nenner_2, 2),
}
if stufe % 2 == 1:
hilfe_id = 31
else:
# Hauptnenner (wird nur für G-Kurs angezeigt)
hilfe_id = 32
parameter['winkel3'] = winkel_erzeugen(kgv, 0, "LightSkyBlue")
parameter.update(segment(center_x, center_y, radius, 360/kgv, 3))
Und auch hier gilt wieder, statt Schlüssel durchzunummerieren benutzt man eine passende Datenstruktur!
Code: Alles auswählen
def segment(center_x, center_y, radius, winkel):
startwinkel = 90
rad_start = math.radians(startwinkel)
rad_end = math.radians(startwinkel + winkel)
return {
"start_x": center_x - radius * math.cos(rad_start),
"start_y": center_y - radius * math.sin(rad_start),
"end_x": center_x - radius * math.cos(rad_end),
"end_y": center_y - radius * math.sin(rad_end),
"largeArcFlag": 0 if winkel < 180 else 1,
}
def rad_erzeugen(center_x, center_y, radius, nenner, zaehler):
return {
"radius": radius,
"center_y": center_y,
"center_x": center_x,
'winkel': winkel_erzeugen(nenner, zaehler, "LightSkyBlue"),
**segment(center_x, center_y, radius, 360 / nenner),
}
...
radius = 60
center_y = 60
center_x = 100
center_x2 = 250
parameter = {
'name': 'svg/winkel.svg',
'object': 'rechnung',
"sweep_flag": 1,
"rad": [
rad_erzeugen(center_x, center_y, radius, nenner_1, zaehler_1),
rad_erzeugen(center_x2, center_y, radius, nenner_2, zaehler_2),
]
}
if stufe % 2 == 1:
hilfe_id = 31
else:
# Hauptnenner (wird nur für G-Kurs angezeigt)
hilfe_id = 32
parameter['rad'].append(rad_erzeugen(center_x, center_y, radius, kgv, 0))
Mit den Änderungen wird auch der svg-Code deutlich einfacher.