Python计数器/ Prob与循环

时间:2017-07-18 09:55:55

标签: python list loops

我有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...

任何帮助都是无价的。

谢谢!

2 个答案:

答案 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