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

相关问题