我知道我在这里错过了一些非常简单的东西......但是我不能把手指放在它上面。
我的代码试图找到“数字”中项目的除数。当计数达到10时,我知道我已经找到了数字中的第一个项目,其中有10个除数...但我看不到退出循环。它只是继续打印具有10个或更多除数的数字。
我认为这是缩进,但没有。然后我在第一个for循环中移动计数器,看看是不是它,但仍然没有。numbers = []
numbers = [i for i in range(1, 100)]
for i in range(1, 100):
test = sum(numbers[0:i])
count = 0
for j in range(1, test+1):
if test % j == 0:
count +=1
if count == 10:
print test
break
建议?
答案 0 :(得分:3)
break
仅打破最内层的for
循环。之后您还需要检查count == 10
:
for i in range(1, 100):
test = sum(numbers[0:i])
count = 0
for j in range(1, test+1):
if test % j == 0:
count +=1
if count == 10:
print test
break # Breaks for j but not for i
if count == 10:
break # Breaks for i
答案 1 :(得分:1)
您必须退出for
个循环。有两种选择:
1)将代码放入函数中并使用return
代替break
def process_something():
for a in items:
for b in other_items:
if some_condition:
return
2)使用辅助变量检测外环也应该断开:
for a in items:
done = False
for b in other_items:
if some_condition:
done = True
break
if done:
break
在您的情况下,您可以使用if count == 10:
代替if done:
,但我不喜欢复制“应用程序逻辑”(DRY principle),因此count == 10
应该在代码只有一次。但这是一个品味问题。
3)将外圈包裹在try:
/ catch ...:
中并引发异常,而不是break
,但请不要这样做。