【问题标题】:Issue with loop "for if else" python循环“for if else”python的问题
【发布时间】:2014-10-27 23:29:03
【问题描述】:

以下代码有问题:

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”相同的标识级别上使用 break,但它似乎没有改变任何东西。

谢谢

【问题讨论】:

    标签: python loops if-statement for-loop


    【解决方案1】:

    您必须缩进 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
    

    【讨论】:

      【解决方案2】:

      您需要将整个else 子句和正文缩进一层。否则,您将在“for”循环中使用“for-else”构造而不是“if-else”。 “for-else”有点 Python 的古怪之处,但它确实存在,而且你不希望它出现在这里。

      【讨论】:

        【解决方案3】:

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

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

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

        &lt;else code&gt; 被执行只有在整个循环在没有break 或异常的情况下完成。这意味着每当&lt;inside code&gt; 发出break 或引发异常时,整个循环就会结束,&lt;else code&gt; 将不会被执行。

        重要的是要了解else 分支与for 循环相关联,而不是循环内的if

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

        【讨论】:

          【解决方案4】:

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

          正如所写,else 与 if 无关,而是与 for(同一级别)相关。所以只有在没有 I 来迭代 for 循环时才应该传递 else 分支。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-03-24
            • 2021-09-16
            • 2023-03-27
            • 1970-01-01
            • 2021-11-23
            • 1970-01-01
            • 2017-08-02
            • 2019-12-04
            相关资源
            最近更新 更多