2016-03-29 10 views
1

実際にこのエラーが何度起こるかは、どこから来たのか分かりません。 私の機能は、BSTの総比較を数えることである 彼女はここに私のコード'str'オブジェクトに属性 '比較'がありません

def total(bst): 
    s = Stack() 
     total = 0 
     s.push(bst._root) 
     while not s.is_empty(): 
      x = s.pop() 
      nu = x._value 
      total = total + nu.comparisons 
      if x._right: 
       s.push(x._right) 
      if node._left: 
       s.push(x._left) 

     return total 

でエラー

total = total + i.comparisons 
AttributeError: 'str' object has no attribute 'comparisons' 

は、ここでは、文字のCLAASです:

class Letter: 

    def __init__(self, letter): 

     assert letter.isalpha() and letter.isupper(), "Invalid letter" 

     self.letter = letter 
     self.count = 0 
     self.comparisons = 0 
     return 

    def __str__(self): 

     return "{}: {}, {}".format(self.letter, self.count, self.comparisons) 

    def __eq__(self, rs): 

     self.count += 1 
     self.comparisons += 1 
     result = self.letter == rs.letter 
     return result 

    def __lt__(self, rs): 

     self.comparisons += 1 
     result = self.letter < rs.letter 
     return result 

    def __le__(self, rs): 

     self.comparisons += 1 
     result = self.letter <= rs.letter 
     return result 

誰でも私にそれを説明することができます、任意のヒープのおかげで。

+0

あなたはLetterクラスの値としてself.comparisonsを定義しています。 'num'は文字列の値なので、それを使うためには比較を使う文字オブジェクトを定義しなければなりません。 – JustDucky

答えて

0

i(またはnum)は、属性を持たないstrです。しかし、あなたのLetterオブジェクトはそうです。たぶんLetterにキャストしてからcomparisonsを使ってみてください:Letter(i).comparisons

EDIT:

理由比較は常に空になっている理由としては、あなたが何か他のものにその変数を比較することはありませんので(比較はインクリメント得るところで、Letterであなたの__eq__を参照)です。彼らはi=Letter(i)のような何かを言うならば、それはiのような何かにそれを比較することだけが変わり始めるでしょうi == 1。それだけであなたの比較が増分されます。

+0

それは動作するが、私のゼロを与えることをありがとうございます – user6116345

+0

私の編集された答えを参照してください。 – Bahrom

+0

心配、幸運を! – Bahrom

関連する問題