2015-12-07 6 views
0

Développer une fonction qui trouve une intersection commune entre un tableau de rectangles. Cependant, la méthode retourne False lorsqu'elle devrait être vraie. La fonction appelle la fonction d'intersection dans le rectangle de la classe. Aucune suggestion.Points communs dans un tableau de rectangles

Class Rectangle: 
    def intersects(self, other): 
     """Return true if a rectangle intersects the other rectangle.""" 
     return (self.top_right.x > other.bottom_left.x and self.bottom_left.x <  other.top_right.x and self.bottom_left.y < other.top_right.y and self.top_right.y > other.bottom_left.y) 

Class Many_Rect: 
    def common_point(self): 
     value = False 
     for i in range(len(self.rectangles) - 2): 
      for j in range(len(self.rectangles) - 1, -1, -1): 
       if self.rectangles[i].intersects(self.rectangles[j]) == True: 
        value = True 
       else: 
        return False 
     return True 
+0

Avez-vous déjà ajouté des lignes de sortie afin de voir ce qui ne va pas? A propos, vous avez écrit une fonction qui croise deux arguments, alors que vous ne lancez qu'une fonction. Est-ce que tout va bien? – Dominique

+0

J'ai couru les sorties, ne peut toujours pas voir pour trouver le problème. Et oui c'est parce que le premier argument est considéré comme la variable de classe en train de tester si self est un argument et que self.rectangles représente autre @Dominique – Stephanie

+0

J'espère que vous avez écrit quelques cas de test - avez-vous testé si votre code pense que deux identiques les rectangles se croisent? – barny

Répondre

0

Une partie de votre problème est parce que dans votre code dès que tout rectangle ne coupe pas votre fonction retourne Faux - mais il ne doit pas revenir Faux sauf si aucun des rectangles se croisent. Cependant, si deux rectangles se croisent, vous pouvez retourner Vrai dès que vous le trouvez, car il n'y a plus de point à vérifier. Votre code devrait ressembler à ceci:

def common_point(self): 
    for i in range(len(self.rectangles) - 1): 
     for j in range(i+1,len(self.rectangles)): 
      if self.rectangles[i].intersects(self.rectangles[j]) 
       # these rectangles intersect - no point checking any more 
       return True 
    # none of the rectangles intersect 
    return False 

Je ne sais pas pourquoi vous utilisez len (self.rectangles) -2 comme la plage pour i - Je pense que cela devrait être -1. De plus, j doit être compris entre i + 1 et len ​​(self.rectangles), sinon quand i == j vous obtiendrez toujours une intersection. J'ai incorporé ces changements.