2016-10-10 4 views
-1

Ich muss herausfinden, ob ein bestimmtes benanntes Tupel in einer Liste von benannten Tupeln existiert (die benannten Tupel sind Punkte ex. A (2,3) in einem 'Polygon' Klasse). Wenn das angegebene Tupel nicht in der Liste vorhanden ist, fügen wir das Tupel an die Liste an. Wenn es existiert, wird eine benutzerdefinierte Ausnahme ausgelöst. Die Funktion funktioniert, wenn der angegebene Punkt in der Liste nicht existiert. Aber es gibt keine Ausnahme, wenn der Punkt existiert und einfach am Ende der Liste wieder hinzugefügt wird. Und hier ist, was ich habe, so weit: Klasse ExistingPointError (Exception): def init (self, Wert): self.value = 0Suche nach einem benannten Tupel in einer Liste von benannten Tupeln

class Polygon(object): 
    counter = 0 
    def __init__(self): 
     Polygon.counter+=1 
     self.points = [] 


# and here's the function that I'm working with 

    def setter(self,pt): 
     def isThere(pt): 
       if pt in self.points: raise ExistingPointError() 

      print("Setting Point") 
     try: 
      isThere(pt) 
      self.points.append(pt) 
     except ExistingPointError as E: 
      print("Point exists! value: ", E) 
     print(self.points) 


P = Polygon() 
point=collections.namedtuple('PointName','Name x y') 
A = point(Name = 'A', x = 5, y = 0) 
B = point(Name = 'B',x = 10,y = 5) 
C = point(Name = 'C',x=5,y=10) 
D = point(Name = 'D', x=-2,y=8) 
lst = [A,B,C,D] 
P.createPolygon(lst) 
P.setter(D) 
+0

Sie sollten posten, wie "pt" aussieht, d. H. Wie Sie Ihr benanntes Tupel definiert haben. – khachik

+0

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Insbesondere haben Sie keinen Code gepostet, der das Problem reproduziert. – Prune

+1

und die for-Schleife in 'isThere' macht keinen Sinn. – khachik

Antwort

0

Wie wäre das?

def setter(self,pt): 
    def isThere(pt): 
     if pt in self.points: 
      raise ExistingPointError() 
     print("Setting Point") 
    try: 
     isThere(pt) 
     self.points.append(pt) 
    except ExistingPointError as E: 
     print("Point exists! value: ", E) 
    print(self.points) 

Ich bin nicht davon überzeugt, dass Ausnahmen der Weg sind, hier zu gehen. Vielleicht versuchen Sie dies:

def setter(self,pt): 
    if pt in self.points: 
     print("Point exists!") 
    else: 
     self.points.append(pt) 
    print(self.points) 
+0

Ich versuchte dies vorher, gibt mir die gleiche Antwort :( – Shruthi

+0

Sehen Sie, die Sache ist Ihre for-Schleife macht keinen Sinn, und die Ausnahmen sind nicht erforderlich. Sind Sie sicher, dass die Punkte gleich sind? (Ein benanntes Tupel unterscheidet sich von einem regulären Tuple) –

+0

Ja, ich habe es ohne die for-Schleife versucht und bekomme die gleiche Antwort: Alle Punkte sind Tupel: L Das ist eine Labor-Aufgabe, also besagt die Frage, dass ich Ausnahmen verwenden muss – Shruthi

0

Sie möchten einen benutzerdefinierten Fehler erhöhen, ExistingPointError(), aber Sie haben nicht wirklich definiert, was das ist. Wenn ich Ihren Code ausführen und ein Duplikat Tupels in ein Polygon-Objekt einfügen, erhalte ich folgende Fehlermeldung:

Traceback (most recent call last): 
File "python", line 27, in <module> 
File "python", line 20, in setter 
NameError: name 'ExistingPointError' is not defined 

Sie müssen möglicherweise keine Ausnahme für diese zu erhöhen, wie @Gjhuizing erwähnt. Eine einfache Nachricht, die dem Benutzer sagt, dass das Objekt bereits existiert, sollte für Ihren Fall ausreichen.

Verwandte Themen