2016-04-15 18 views
-1

私は自分のクラスをどのように初期化するべきかを考え出すのに苦労している。だから、私がこのようにすると結果は得られますが、ブール型も返されます。私はそれが正常な数字を任意のアイデアに戻したいだけですか?例。オッズPython Dictクラス初期化子を設定する

class DictSet: 

    def __init__(self, elements): 
     self.elements = {} 
     for i in elements: 
      self.elements[i] = True 

    def addElement(self, x): 
     self.elements.update(x) 

    def deleteElement(self, x): 
     for i in (self.elements): 
      if i == x: 
       del self.elements[x] 

    def member(self, x): 
     for i in (self.elements): 
      if i == x: 
       return True 
      return False     #Checks if its an item 

    def intersection(self, set2): 
     add = [] 
     for i in self.elements: 
      if i in set2.elements: 
       add.append(i) 
     return DictSet(add) # Returns Intersected New List 

    def union(self, set2): 
     return DictSet(list(self.elements.keys()) + list(set2.elements.keys())) #Puts all the elements together 

    def subtract(self, set2): 
     sub = [] 
     for i in self.elements: 
      if i not in set2.elements: 
       sub.append(i) 
     return DictSet(sub)  # Only return ones set of elements 

    def __repr__(self): 
     return "<Set: " + str(self.elements) + ">" 


def main(): 
    all = DictSet([1,2,3,4,5,6,7,8,9,10]) 
    odds = DictSet([1,3,5,7,9]) 
    evens = DictSet([2,4,6,8,10]) 
    print("all", odds.union(evens)) 
    print("all", evens.union(odds)) 
    print("empty", odds.intersection(evens)) 
    print("odds", all.intersection(odds)) 
    print("odds", all.subtract(evens)) 

if __name__ == '__main__': 
    main() 

couldntのフォーマット適切にこれ、あなたの辞書の値を使用したいのですが、唯一のキーはありませんので、いくつかの書式の問題

+3

「正常な数字を返す」とはどういう意味ですか?何の関数から何の数を返しますか?あなたはこのクラスのセマンティクスが何であるべきかを記述していないので、私がコード内で見ているものがバグか意図どおりに動作しているかどうかはわかりません。 – Blckknght

+0

@Blckknght申し訳ありません。私の最初の印刷物はすべてであるはずです。 「私は本当に変わってしまった:」、3: '、4:' '、5:' '、6:' '、7:'、8: ''、9: "最後のカップル分以内に。 – WannaBeCoder

答えて

0

あなたが達成しようとしていることは完全にはっきりしませんが、なぜ出力を得るのかを教えてください。

最初に、オブジェクトにprintが呼び出されたときのオブジェクトの表示方法を決定するのは、__repr__関数です。 __repr__メソッドには、return "<Set: " + str(self.elements) + ">"というステートメントがあります。あなたのフィールドは、self.elementsです。辞書です。辞書にstr()関数を使用すると、辞書は、{で始まり、}で終わる文字列に変換され、各キー/値のペアがリストされます。あなたの鍵は1から10の整数で、すべての値はTrue__init__)です。 self.elements STR()メソッドが出力{1: True, 2: True, 3: True, 4: True, 5: True, 6: True, 7: True, 8: True, 9: True, 10: True}を生成するので

('all', <Set: {1: True, 2: True, 3: True, 4: True, 5: True, 6: True, 7: True, 8: True, 9: True, 10: True}>)

:だから、あなたが私たちに与えてくれたコードのために、あなたは出力が表示されます。あなただけの('all', <Set: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>)を表示したい場合は、あなたの__repr__のみキーself.elements(ないキー)を表示するように変更する必要があります。あなたはそのようにそれを行うことができます:

__repr__(self): return "<Set: " + str([key for key in self.elements]) + ">"

[key for key in self.elements]list comprehensionごとに、あなたのself.elements辞書フィールドからキーのリストを作成します。

それとも、あなたはすでにあなたの他のコードでこのような何かを持っているので、あなただけ行うことができます:

__repr__(self): return "<Set: " + str(self.elements.keys()) + ">"

を私は__repr__のこの最後の定義は少し明確だと思う、最初のものは、単に何でしたすぐに私の頭の中に突っ込んだ。

私が説明した出力が最終目標であれば、self.elementsの辞書タイプは必要ありません。リストを使うだけで、より明確になります。

0

ことってありますので、それは代わりにsetを使用することがよりフィットですdict

setオブジェクトは、別個のハッシュ可能オブジェクトの順序付けられていないコレクションです。

関連する問題