2014-10-27 67 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