我在以下代码中遇到问题:
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”相同的同一级别的休息时间,并且它似乎没有改变任何东西。
谢谢
答案 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