2016-03-29 75 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

您將self.comparisons定義爲類Letter的值。 'num'是一個字符串值,所以爲了使用它,你必須定義一個字母對象來使用比較。 – JustDucky

回答

0

看起來像i(或num)是str,它不具有comparisons屬性。但是,您的Letter對象可以。也許投它到Letter,然後嘗試使用comparisons像這樣:Letter(i).comparisons

編輯:

的原因,爲什麼比較始終是空的,因爲你根本不比較該變量別的東西(這是攀比得到的遞增,看你__eq__Letter)。他們只會開始改變,如果你說了類似i=Letter(i)的東西,然後比較ii == 1。只有這樣你的比較纔會增加。

+0

謝謝你知道它的作品,但給我的零 – user6116345

+0

看到我編輯的答案。 – Bahrom

+0

不用擔心,祝你好運! – Bahrom

相關問題