2013-09-22 2 views
0

Одна часть моей программы требует, чтобы я проверял, чтобы две «вещи» не перекрывались (занимают одно и то же пространство, то есть координаты). По какой-то причине он не пересекает все хреды. Я уверен, что это простая ошибка программирования, но я сводил программу к простому MWE, и проблема не устранена!Python loop not looping through xrange

import numpy as np 

class foo(object): 
    def __init__(self, yx): 
     self.yx = yx 

def overlap(fooFun): 
    n = len(fooFun) 
    for i in xrange(n): 
     for j in xrange(n): 
      if i != j: # Don't check itself 
       print '----------------------' 
       print 'i,j:', i, j 
       print 'Comparing:', fooFun[i].yx, fooFun[j].yx 
       if np.array_equal(fooFun[i].yx, fooFun[j].yx) == True: 
        print 'Overlap!' 
        return False 
       else: 
        print 'No Overlap!' 
        return True 

# Test functions/class 
yx = np.array([[0, 0], [0, 1], [0, 0]]) 
n = len(yx) 

fooGroup = [] 
for i in xrange(n): 
    fooGroup.append(foo(yx[i])) 

overlap(fooGroup) 

что приводит к:

---------------------- 
i,j: 0 1 
Comparing: [0 0] [0 1] 
No Overlap! 

Для какой-то причине это не через петлю я = 0, 1, 2 и J = 0, 1, 2.

+0

@askewchan: Обычно я программирую таким образом, но я пытался устранить любую неопределенность в коде. Я работал над этой проблемой почти целый день и не хотел пропустить что-то тривиальное (хотя мне все же удалось ...) – Blink

ответ

1

return A оператор заставляет функцию немедленно прекратить работу. Он пропускает все. Если вы хотите пропустить все циклы, вам нужно удалить свои операторы return.

+1

Только второй «возврат» проблематичен. Первый - в нужном месте. – Blender

+0

Или удалите его при условии продолжения цикла. –

+1

Ну, как это ни стыдно, я рад, что он работает сейчас. Я создал флаг с именем move, которому присваивается значение true или false. Кажется, просто отлично. – Blink