【发布时间】:2017-11-27 20:29:51
【问题描述】:
我正在尝试在列表中迭代 elif 语句,并在末尾添加一个 else 语句。这是我的代码:
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 和 ingredients_objects 是列表。
问题是这段代码很糟糕,原因有很多。如果第一个条件不满足,即使其中一个 for 循环条件已经运行,每个 for 循环也会运行,最后的 else 语句也将运行。实际上,如果满足任何 for 循环中的任何 if 语句,则不应执行 if 块的其余部分。
代码应该更像这个伪代码:
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)
我觉得我可能忽略了一些非常简单的事情,如果是这种情况或者这是一个写得不好的问题,请原谅我。谢谢!
【问题讨论】:
-
您不能拥有
elif for。您可以使用变量来跟踪其中一个循环是否运行,然后仅在运行时执行下一个循环。 -
“跑”是指
each._button.setFill("green")吗? -
将它们包装在一个函数中,而不是
break使用return是一种方法。
标签: python list for-loop if-statement