Das Ziel dieser Schleife wird für jedes star
Element (bestehend aus x und y Koordinaten in der Form von [int, int]
) in der Liste stars
, die Berechnung der Entfernung und Winkel zu jeder anderen star
Python: Iterieren über Array mit zwei verschachtelten Schleifen
#list to store lists of distances
star_map = []
#go through each star to calculate distance from this star
for star in stars:
print("main loop")
sub_map = [] #list of distances from this star
for sub_star in stars:
print("sub loop")
#find distance
dx = float(star[0]-sub_star[0])
dy = float(star[1]-sub_star[1])
#if distance is zero, break because it's the same star
if(dx == 0 and dy == 0):
break
#otherwise get distance and angle
dist = np.sqrt(dx ** 2 + dy ** 2)
theta = get_theta(dx, dy)
#add it to a list of distances from this star
sub_map.append((dist, theta))
print("sub loop")
#add the list of distances from this star to the main list
star_map.append(sub_map)
Was ich erwarte, ist, dass es eine „Hauptschleife“ von „sub-Loop“ len(stars) - 1
mal gefolgt druckt. (-1, denn wenn der Stern in den inneren und äußeren Schleifen gleich ist, und ich möchte, dass ignorieren)
Was passiert ist, dass ich diese:
main loop
main loop
sub loop
main loop
sub loop
sub loop
main loop
sub loop
sub loop
sub loop
etc, etc, bis die letzte Schleife, wenn die erwartete Anzahl von "Sub-Loop" -Zeilen gedruckt wird.
dh jedes Mal durchläuft es einen weiteren Stern.
Warum passiert das und wie kann ich jeden Stern jedes Mal durchlaufen?
Edit: Das Problem war, dass anstelle der Fortsetzung, ich Pause verwendet, um die Schleife zu stoppen, wenn der Stern in der Nebenschleife der gleiche wie die äußere Schleife war. Ändern zum Fortfahren behoben dies.
Beachten Sie, dass Sie eine Klausel "break" haben, auch haben Sie zwei "sub loop" Drucke. OTOH Ich glaube nicht, dass dieser Code die von dir beschriebene Ausgabe erzeugen soll. Bitte überprüfen Sie erneut. – wRAR
hi, (dx == 0 und dy == 0) sollte nur einmal wahr sein, wenn das Sternelement in den äußeren und inneren Schleifen gleich ist. Also sollte ich len (Sterne) - 1 "sub loop" Zeilen sehen. – Tim
die Frage bearbeitet, um das widerzuspiegeln – Tim