【问题标题】:break from for loop in python [closed]从python中的for循环中断[关闭]
【发布时间】:2023-11-24 09:41:01
【问题描述】:

我在 for 循环中使用了 break 命令,但它似乎不起作用。 这是我的代码:

    winw = 60
    winh = 40
    for i in range(num_scale_steps):
        print "in iteration %d " % i
        # some code that will crash if winw > 240
        winw = 10 + winw
        winh = 10 + winh
        print "new width:%d"   % winw
        if (winh > 360) or(winw > 240) :
            break

但它不会中断。它给出的最后输出是:

new width 240
in iteration 18
new width:250 --> at this point it should break and not continue to next iteration
in iteration 19  
# then it crashes because winw > 240

250 大于 240。但是为什么循环在迭代 19 之前没有中断?

【问题讨论】:

  • 确实在 winw = 250 之后立即中断(这是最后一次打印,然后中断)。再次检查。
  • 如果您希望它在上一次迭代中中断,您需要使用>= 而不是>
  • 尝试只运行您提供的代码。没有迭代 19.
  • 是的,代码的行为与您描述的不同。
  • 无法重现您的结果,请再次检查您的代码。

标签: python loops for-loop break


【解决方案1】:

您应该注意您的winhwinw 切勿超过您的预期最大值。为确保这一点,您需要在实际更改窗口大小之前测试该值加上步长大小不超过最大值。

其他人提供的解决方案(使用>=或更改执行顺序)只会解决您的问题,只要您从十的倍数开始。试试下面的。我冒昧地对您的代码进行了一些调整。

winw = 60
winh = 40
stepsize = 10
for i in range(num_scale_steps):
    if (winh + stepsize > 360) or(winw + stepsize > 240) :
        break
    print "in iteration %d " % i
    winw += stepsize
    winh += stepsize
    print "new width:%d"   % winw

【讨论】:

  • 谢谢,这行得通。但我不明白我的代码到底出了什么问题?
  • 您在更改变量winwwinh 之后测试了该值是否超出了允许的范围。所以他们的一个值总是会(只是)超出允许的范围。
【解决方案2】:

试试这个:

  winw = 60
    winh = 40
    for i in range(num_scale_steps):
        if (winh > 360) or(winw > 240) :
            break
        print "in iteration %d " % i
        winw = 10 + winw
        winh = 10 + winh
        print "new width:%d"   % winw

您需要在打印新值之前检查条件。

【讨论】:

  • 我试过这个。没有区别。