这个报错告诉对象没有属性root,但我在_init_不是写过了吗,刚学习类,不太清楚,疑惑。
完整代码如下
char_get=input().split( )#储存字母名称
percent=input().split()#储存概率
percent=[int(percent[i])for i in range(len(percent))]
length=len(percent)#有多少个字符
class Nodecreate(object):
def _init_(self,name=None,pro=None):
self.name=name
self.pro=pro
self.left=None
self.right=None
class Huffman(object):
def _init_(self):
self.list=[Nodecreate(char_get(i),percent(i)) for i in range(length)]#建立列表,用来进行比较概率。
while(self.list)!=1:#当只剩根节点时停止运行
self.list.sort(key=lambda x:x.pro)#从小到大排序
self.new=Nodecreate(pro=(self.list[0].pro+self.list[1].list))#新的节点pro之和
self.new.left=self.list.pop(0)#左节点为列表第一个节点
self.new.right=self.list.pop(0)#右节点为现在第一个
self.list.append(self.list)
self.root=self.list[0]#储存根节点
self.myth=[0 for i in range (10)]
def order(self,now_tree,myth_length):#遍历得到huffman编码
now_node=now_tree
if now_node.name==None:
return
else:
print(now_node.name,end="")
for i in range (myth_length):
print(self.myth[i],end="")
return
self.myth[myth_length]=0
self.order(now_node.left,myth_length+1)
self.myth[myth_length] = 1
self.order(now_node.right, myth_length + 1)
def from_print(self):
self.order(self.root,0)
tree=Huffman()
tree.from_print()