2016-10-10 35 views
-1

名前付きタプルのリストに名前付きタプルが存在するかどうかを調べる必要があります(名前付きタプルは「ポリゴン」のポイントA(2,3)クラス)。指定されたタプルがリストに存在しない場合は、そのタプルをリストに追加します。それが存在する場合、ユーザー定義の例外が発生します。この関数は、指定された点がリストに存在しない場合に機能します。しかし、ポイントが存在し、それが単にリストの最後に追加された場合に例外は発生しません。そして、ここで私がこれまで持っているものです。 クラスExistingPointError(例外): DEF のinit(自己、値):この程度 self.value = 0名前付きタプルのリストで名前付きタプルを検索する

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

名前付きタプルをどのように定義したかのように、 'pt'のようなものを投稿する必要があります。 – khachik

+0

ようこそStackOverflowへ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。具体的には、問題を再現するコードを投稿していません。 – Prune

+1

であり、 'isThere'のforループは意味をなさない。 – khachik

答えて

0

どのように?

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) 

例外はここに行く方法ですが、私は確信していません。たぶんこれを試してみてください:

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

私はこれを前に試してみましたが、同じ答えを返します:( – Shruthi

+0

あなたのforループは意味がなく、例外は必要ありません。 tuple) –

+0

ええ、私はforループなしで試してみましたが、同じ答えが得られます。すべての点の名前はタプルです:Lこれはラボの代入です。 – Shruthi

0

ユーザー定義のエラーExistingPointError()を発生させたいのに、実際に何が定義されていないのでしょうか。私はあなたのコードを実行し、ポリゴンオブジェクトに重複したタプルを挿入すると、私は次のエラーを取得する:

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

@Gjhuizingが述べたようにあなたは、このための例外を発生させる必要はありません。オブジェクトがすでに存在していることをユーザーに伝える簡単なメッセージは、あなたのケースにとって十分であるはずです。

関連する問題