2017-06-27 5 views
-2

私は不公平なセットを表すADTを設計して実装しようとしています。 セットは実際のセットと同じルールに従うADTで、新しいアイテムがセットの後ろに追加され(プッシュ)、古いアイテムがセットの前面から削除されます(ポップ)。ADTを改善するには?

すでにセットに存在する値を追加しようとすると、何も起こりません。これはセットの標準的な期待動作です。ノーマルセットと私が提出する不公平セットとの違いは、大文字をセットにプッシュすると、それがセット内にすでに存在するかどうかにかかわらず追加する必要があるということです。

上位のコンテンツは私が直面している問題です。

私が書くことを試みたコード:

class Set: 
class Full(Exception): 
    pass 
class Empty(Exception): 
    pass 


def __init__(self, data=None): 

    """ Show the set base and the data are inside the dictionary""" 
    self.data = {} # the dictionary of the set 
    if data != None: 
     if len(data) != len(set(data)): 
      data = set(data) 
     for d in data: 
      self.data[d] = d 

def add(self, value): 

    """This function show how to add value in to the set, if value 
     in the set, it will return a message and stop the process. Else, 
     The new value will add into the set""" 

    if value in self.data.keys(): 
     return 'This word is already in set' 
    else: 
     self.data[value] = value # value == key, so it only show the value is store 

def remove(self, value): 

    """This function is use for removing value from the set, 
     if the value is not in the set, it will return a message""" 

    if value not in self.data.keys(): 
     return 'No value found in the set' 
    self.data.pop(value) 

def size(self): 

    """ Returns the number of values currently stored in the 
     set """ 

    return len(self.data.keys()) 

def is_in(self, value): 

    """ This funiction use for test is the current value save in 
     teh set, if yes it will return true. Else return false.""" 

    if i in self.data.keys(): 
     return True 
    else: 
     return False 


def is_in(self, value): 

    """ This funiction use for test is the current value save in 
     teh set, if yes it will return true. Else return false.""" 

    if i in self.data.keys(): 
     return True 
    else: 
     return False 

私はプログラムで実行したい機能:

  • sizeは不公平セットの現在のサイズを返す必要があります。
  • addは、不公平なセットに特定の文字を追加する必要があります。
  • removeは、大文字が複数回格納されている場合はそのうちの1つを削除する必要がある場合、不公平なセットから特定の文字を削除する必要があります。
  • is_inは、指定された文字が現在不正なセットに格納されているかどうかを示す必要があります。

setまたはfrozensetをpythonライブラリに使用せずに改善するにはどうすればよいですか?

+1

これは以前の質問の繰り返しですが、今削除されていますが、解説を求める複数のコメントがありました。実際に役に立つ情報を追加することによって、それらのコメントに反応したようには見えません。あなたの "不公平なセット"はまだ完全には不明です。以前のコメントに注意して明確にしてください。 –

答えて

0

ある種類の値(大文字でないもの)と別の方法(袋として)と別の種類の入力(何かが大文字 )。

このような問題を解決する最も簡単な方法は、1つのオブジェクトに2つの動作を実装型のインスタンスを集約し、その値に基づいてインスタンスにディスパッチインターフェースを提供することです。たとえば、セットとcounterを使用して、値が大文字であるかどうかに基づいて選択する必要があります。あなたはまた、単にカウンターやディクテーションを持っているだけでなく、その値に基づいてエントリーを減らしたり、完全に取り除いたりすることもできます。

実際のセットでは、新しいアイテムがセットの背面に追加され(押して)、古いアイテムがセットの前面から削除されます(ポップ)。

セットデータ構造の通常の使用では、順序付けされていない「前」または「後」はありません。 「実際のセット」というフレーズはあまり意味がありません。結局のところ、抽象データ型です。