问题循环“for if else”python

时间:2014-10-27 23:29:04

标签: python loops if-statement 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

这部分代码是我的粒子位于XY_temp [i]中的移动或不移动的编码。 我尝试了这个结构更容易,它似乎工作,但不是在这里。 我没有任何错误消息,但我可以在结果中看到,else之后的部分永远不会执行,即使它应该是。 我有人会想到一个解释,这将是我的欢迎

我是Python的新手,所以我希望这不是一个愚蠢的问题,但是经过几个小时的网络搜索和我自己寻找解决方案,我在这里问。

我尝试在与“if”相同的同一级别的休息时间,并且它似乎没有改变任何东西。

谢谢

4 个答案:

答案 0 :(得分:0)

你必须缩进else部分。目前,脚本将其视为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

答案 1 :(得分:0)

您需要将整个else条款和正文缩进一层。否则你有一个&#34; for-else&#34;构造而不是&#34; if-else&#34;在&#34; for&#34;环。 &#34; for-else&#34;有点像Python奇怪,但它确实存在,你不想在这里。

答案 2 :(得分:0)

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

如上所述,else与if相关但与for(相同级别)无关。因此,只有在没有迭代for循环的情况下才应该传递else分支。

答案 3 :(得分:0)

python中没有for-if-else循环,但只有for-else循环。里面的if是单独的声明。

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

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

<else code>执行仅在整个循环完成时没有break或异常。这意味着只要<inside code>发出break或引发异常,整个循环就会结束,<else code>将不会被执行。

了解else分支与for循环相关联,而非循环内的if非常重要。

有关详细信息,请参阅:https://wiki.python.org/moin/ForLoop