'str' 对象没有属性 'comparisons'

'str' object has no attribute 'comparisons'

实际上我多次收到这个错误,我不知道它是从哪里来的。! 我的功能是计算 bst 中的总比较, 她是我的代号

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'

这里是字母的分类:

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

谁能给我解释一下,谢谢大家的帮助。

看起来 i(或 num)是 str,它没有 comparisons 属性。但是,您的 Letter 对象可以。也许将其转换为 Letter 然后尝试使用 comparisons 像这样:Letter(i).comparisons.

编辑:

为什么比较始终为空的原因是因为您永远不会将该变量与其他变量进行比较(这是比较递增的地方,请参阅 Letter 中的 __eq__)。只有当你说 i=Letter(i) 之类的内容时,它们才会开始改变,然后将 ii == 1 之类的内容进行比较。只有这样你的比较才会增加。