风起云间林 2021-11-06 00:18 采纳率: 100%
浏览 59
已结题

python,要求输入对应字符和概率,求哈夫曼编码。

这个报错告诉对象没有属性root,但我在_init_不是写过了吗,刚学习类,不太清楚,疑惑。

img

img

完整代码如下

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()

  • 写回答

1条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 11月14日
      • 已采纳回答 11月6日
      • 创建了问题 11月6日

      悬赏问题

      • ¥15 用mysql做一个高校工资管理系统
      • ¥21 Multisim设计用三端集成稳压器设计稳压电路
      • ¥15 tp6,在iframe里的网址通过获取url参数失败
      • ¥15 打开opendaylight查看拓扑,为什么直接就显示了两个Switch,在mininet配置了一个topo,这两个Switch还在
      • ¥15 无法远程连接pgsql
      • ¥15 关于#Multisim#的问题,如何解决?(关键词-软件设计)
      • ¥15 建立DLNM模型时显示基础基矩阵不一致
      • ¥15 贝叶斯重复测量方差分析
      • ¥15 c#五子棋为什么悔棋后全部的棋子都没了 但是数组中的棋子还在只是悔棋后剩余的棋子在窗口没显示
      • ¥15 c#如何将到毫秒的时间字符串转换成byte[8]