我有2个坐标列表,X和Y.如果我们绘制它们,我们会看到一个或多或少的圆形轨迹。我的目标是计算完成的圆轨迹数。
算法的想法:
1 ..我计算了轨迹的平均中心
Center = (int(sum(X)/len(X)), int(sum(Y)/len(Y)))
中心将是X0和Y0
2..K是柜台。 我看起来在哪里,并且每当它回到南/西区域时,K + = 1.而且,直到我离开这个区域,K不再堆叠了。
K = 0
c = 0
while c < len(X):
if X[c] >= X0 and Y[c] >= Y0:
c += 1
continue
elif X[c] < X0 and Y[c] >= Y0:
c += 1
continue
elif X[c] >= X0 and Y[c] < Y0:
c += 1
continue
else:
K += 1
# On saute les points suivants dans le même quart
while X[c] < X0 and Y[c] < Y0:
c += 1
它有效,但如果我的最后一点在这个区域,那就不行了,在这种情况下,我得到一个超出范围的同时X [c]&lt; X0和Y [x]&lt; Y0
我尝试了这段代码,我觉得更好,但我无法让它工作:
for c in range(len(X)):
if X[c] >= X0 and Y[c] >= Y0:
continue
elif X[c] < X0 and Y[c] >= Y0:
continue
elif X[c] >= X0 and Y[c] < Y0:
continue
else:
K += 1
while X[c] < X0 and Y[c] < Y0:
# Here i need a continue but on the for, not on the while...
任何帮助都是无价的。
谢谢!
答案 0 :(得分:0)
我希望我能正确理解问题,你要找的是在嵌套循环中突破单循环?您可以使用异常从内循环
返回class Found(Exception): pass
for c in range(len(X)):
try:
if X[c] >= X0 and Y[c] >= Y0:
continue
elif X[c] < X0 and Y[c] >= Y0:
continue
elif X[c] >= X0 and Y[c] < Y0:
continue
else:
K += 1
while X[c] < X0 and Y[c] < Y0:
#do whatever you want here
raise Found #raise exception when condition occurs
except Found:
print(K)
答案 1 :(得分:0)
嗯,我找到了一个解决方案,不是很漂亮,而是可操作的。 我只是查看我的最后一个位置。如果它在我正在检查的圆圈的1/4处,我将检查区域更改为相反的1/4。
if (X[len(X)-1] >= X0 and Y[len(X)-1] >= Y0) or (X[len(X)-1] < X0 and Y[len(X)-1] >= Y0) or (X[len(X)-1] >= X0 and Y[len(X)-1] < Y0):
while c < len(X):
if X[c] >= X0 and Y[c] >= Y0:
c += 1
continue
elif X[c] < X0 and Y[c] >= Y0:
c += 1
continue
elif X[c] >= X0 and Y[c] < Y0:
c += 1
continue
else:
K += 1
# On saute les points suivants dans le même quart
while X[c] < X0 and Y[c] < Y0:
c += 1
else:
while c < len(X):
if X[c] <= X0 and Y[c] <= Y0:
c += 1
continue
elif X[c] > X0 and Y[c] <= Y0:
c += 1
continue
elif X[c] <= X0 and Y[c] > Y0:
c += 1
continue
else:
K += 1
# On saute les points suivants dans le même quart
while X[c] > X0 and Y[c] > Y0:
c += 1