2016-10-15 4 views
0

Meine Klasse beschäftigt sich mit Listen von Ints und berechnen sie, so dass sie nicht wiederkehrende Werte haben. Ich habe eine neue Methode 'intersect' implementiert, die zwei intSet-Objekte aufnimmt und ein neues Objekt mit den Werten erstellt, die in beiden Objektlisten (vals) vorkommen.Wie erstellt man eine Instanz einer Klasse innerhalb einer Methode innerhalb der Klasse, python

Ursprünglich erstellte ich eine neue Liste innerhalb der Methode (anstelle eines Objekts), um die in beiden Listen gefundenen Ints hinzuzufügen, aber ich dachte, es wäre passend, ein neues Objekt zu erstellen und die Werte zu Val in dem neuen Objekt hinzuzufügen . Allerdings erhalte ich die Fehler NameError: global name 'inSet' is not defined

Hier ist mein Code:

class intSet(object): 
    """An intSet is a set of integers 
    The value is represented by a list of ints, self.vals. 
    Each int in the set occurs in self.vals exactly once.""" 

    def __init__(self): 
     """Create an empty set of integers""" 
     self.vals = [] 

    def insert(self, e): 
     """Assumes e is an integer and inserts e into self""" 
     if not e in self.vals: 
      self.vals.append(e) 

    def member(self, e): 
     """Assumes e is an integer 
      Returns True if e is in self, and False otherwise""" 
     return e in self.vals 

    def remove(self, e): 
     """Assumes e is an integer and removes e from self 
      Raises ValueError if e is not in self""" 
     try: 
      self.vals.remove(e) 
     except: 
      raise ValueError(str(e) + ' not found') 

    def __str__(self): 
     """Returns a string representation of self""" 
     self.vals.sort() 
     return '{' + ','.join([str(e) for e in self.vals]) + '}' 

    def intersect(self, other): 
     #intersected = [] 
     intersected = inSet() 
     for x in self.vals: 
      if x in other.vals: 
       #intersected.append(x) 
       intersected.insert(x) 
     return intersected 


a= {-15,-14,-5,-2,-1,1,3,4,11,18} 
b= {-12,-3,3,8,12,16,18,20} 
set1 = intSet() 
set2 = intSet() 
[set1.insert(x) for x in a] 
[set2.insert(x) for x in a] 

print set1.intersect(set2) 

Bonus Frage, die meisten der Code durch die Admins für die MOOC geschrieben wurde, 6.00.1x. Ich musste nur die "Schnittpunkt" -Methode implementieren. Warum werden geschweifte Klammern, die für Wörterbuchzwecke verwendet werden, stattdessen in der Liste [] Klammern verwendet?

+0

Sie haben 't' im Namen' inSet' vergessen. – furas

+2

Bonusantwort: In Python zum Erstellen 'set' können Sie' set() 'oder' {} 'ie verwenden. '{1,2,3,2,5}' – furas

+0

OMG, Scala Übung in Python?! – volcano

Antwort

1

Es ist intSet, nicht inSet, Sie haben es in Ihrer Schnittpunktmethode falsch geschrieben. Und aus Gewohnheit ist es besser, den Unterricht mit einem Kapital zu beginnen (obwohl es keine festen Regeln gibt, wird diese Angewohnheit oft eingehalten).

Über die geschweiften Klammern sind sie nicht nur für Wörterbücher, sondern auch für Python-Sets. Wenn Sie sie in der __str__-Methode verwenden, legt die Ausgabe nahe, dass Instanzen Ihrer Klasse tatsächlich eine Art von Mengen sind.

Verwandte Themen