'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)
之类的内容时,它们才会开始改变,然后将 i
与 i == 1
之类的内容进行比较。只有这样你的比较才会增加。
实际上我多次收到这个错误,我不知道它是从哪里来的。! 我的功能是计算 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)
之类的内容时,它们才会开始改变,然后将 i
与 i == 1
之类的内容进行比较。只有这样你的比较才会增加。