Ich versuche, elif Anweisungen über Listen mit einer else-Anweisung am Ende zu iterieren. Hier ist mein Code:Python If/Elif/Else, Für und Listen
if clickPoint is None:
print(clickPoint)
for each in meal_objects:
if inside(clickPoint, each._button):
each._button.setFill('green')
break
for each in build_meal_objects:
if inside(clickPoint, each._button):
each._button.setFill('green')
break
for each in ingredient_objects:
if inside(clickPoint, each._button):
each._button.setFill('green')
break
else:
print(clickPoint)
meal_objects, build_meal_objects und ingredient_objects sind Listen.
Das Problem ist, dass dieser Code aus vielen Gründen schrecklich ist. Wenn die erste Bedingung nicht erfüllt ist, wird jede for-Schleife ausgeführt, auch wenn eine der for-Schleifen-Bedingungen bereits ausgeführt wurde, und die letzte else-Anweisung wird ebenfalls ausgeführt. Wenn eine der if-Anweisungen in einer der for-Schleifen erfüllt ist, sollte der Rest des if-Blocks nicht ausgeführt werden.
Der Code sollte wirklich etwas mehr wie diese Pseudo-Code sein:
if clickPoint is None:
print(clickPoint)
elif for each in meal_objects:
if inside(clickPoint, each._button):
each._button.setFill('green')
break
elif for each in build_meal_objects:
if inside(clickPoint, each._button):
each._button.setFill('green')
break
elif for each in ingredient_objects:
if inside(clickPoint, each._button):
each._button.setFill('green')
break
else:
print(clickPoint)
Ich fühle mich wie ich etwas wirklich einfach, mit Blick könnte so verzeiht mir, wenn dies der Fall ist oder wenn es sich um eine schlecht geschriebene Frage. Vielen Dank!
Sie können kein 'elif for' haben. Sie können eine Variable verwenden, um zu verfolgen, ob eine der Schleifen ausgeführt wurde, und dann nur die nächste Schleife ausführen, falls dies der Fall ist. – anonymoose
Mit "ran" meinst du es 'each._button.setFill (" grün ")'? – anonymoose
Wickeln Sie sie in eine Funktion und anstelle von "brechen" verwenden Sie eine "Rückkehr" ist eine Möglichkeit. –