繁体   English   中英

循环问题“ for if else” python

[英]Issue with loop “for if else” python

我在以下代码中有问题:

for n in range(0,i)+range(i+1,len(XY_pos)): # excludes i==n
    if distance(XY_temp,i,n)<sigma:
        XY_temp[i]=XY_pos[i] # back to before the move
        break
else:
    XY_pos[i]=XY_temp[i] # move accepted
    accepted_moves+=1
    NUMBER.append(number(r))
    # overlap condition

这部分代码是对我位于XY_temp [i]中的粒子进行或不进行移动的编码。 我用更简单的方法尝试了这种结构,它似乎起作用了,但是在这里不行。 我没有任何错误消息,但是从结果中我可以看到,即使在应有的情况下,其他部分也永远不会执行。 我可以想到一个解释,这将受到热烈欢迎

我真的是Python的新手,所以我希望这不是一个愚蠢的问题,但是经过数小时的网上寻找以及独自寻找解决方案后,我在这里提出了问题。

我尝试使用与“ if”相同的标识级别的中断,它似乎没有任何改变。

谢谢

您必须缩进else部分。当前,脚本将其视为for循环一部分

for n in range(0,i)+range(i+1,len(XY_pos)): # excludes i==n
    if distance(XY_temp,i,n)<sigma:
        XY_temp[i]=XY_pos[i] # back to before the move
        break
    else:
        XY_pos[i]=XY_temp[i] # move accepted
        accepted_moves+=1
        NUMBER.append(number(r))
        # overlap condition

您需要缩进整个else子句,并将正文深一层。 否则,您将在“ for”循环中使用“ for-else ”构造,而不是“ if-else”构造。 “ for-else”有点像Python的怪异之处,但它确实存在,您在这里不想要它。

Python对缩进非常严格:缩进代码的结构。

如所写,else与if不相关,而与for(相同级别)相关。 因此,只有在没有我要迭代for循环的情况下,才应传递else分支。

在python中没有for-if-else循环,只有for-else循环。 if里面是单独的语句。

python中的for-else循环有点棘手:

for i in something:
    <inside code>
else:
    <else code>

只有在整个循环完成而没有break或异常的情况下,才执行<else code> 这意味着,每当<inside code>发出break或引发异常时,整个循环就会结束,并且<else code>将不会执行。

重要的是要了解else分支与for循环联系在一起,而不是与if循环联系在一起。

有关更多信息,请参见: https : //wiki.python.org/moin/ForLoop

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM