2014-10-27 64 views
0

我有下面的代码有问题:问题与循环“因为如果其他”蟒蛇

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 

这部分代码是codition作出或不符合我的粒子的举动位于XY_temp [I] 。 我用更简单的方式尝试了这个结构,它似乎可以工作,但不在这里。 我没有任何错误消息,但是我可以看到结果中else之后的部分即使在应该时也不会执行。 我一个人能想到的解释,这将是warlmy欢迎

我在Python真正的新,所以我希望这不是一个愚蠢的问题,但看在网上小时后由我自己找到解决的办法,我在这里问。

我尝试了与“if”相同的身份识别级别的休息,它似乎没有改变任何东西。

谢谢

回答

0

你要缩进其他part.currently脚本把它当作part of the for loop

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 
0

您需要将您的整个else子句和主体缩进更深一层。否则,你在“for”循环中有一个“for-else”结构,而不是“if-else”。 “for-else”有点奇怪,但它确实存在,你不想在这里。

0

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

正如所写的,else与if相关,而与for(相同等级)无关。所以,只有当我没有迭代for循环时,才应该传递else分支。

0

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

for-else环在python是有点棘手:

ONLY IF整个循环结束没有 break或异常
for i in something: 
    <inside code> 
else: 
    <else code> 

<else code>执行。这意味着只要<inside code>发出break或引发异常,整个循环就会结束,并且<else code>将不会执行。

重要的是要明白,else分支与for循环并列,而不是循环内的if

欲了解更多信息,请参阅:https://wiki.python.org/moin/ForLoop