风起云间林 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条回答 默认 最新

  • 关注

    def __init__(self,name=None,pro=None):
    __init__ 应该是两边各有两个_下划线
    你写的是只有一个下划线_init_

    如有帮助,望采纳!谢谢! 请点击下我回答下方的采纳该回答按钮。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

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

悬赏问题

  • ¥50 有偿求qftp工具。能连接,下载文件,发送代码,windows环境,最好qt6 要qt creator写的
  • ¥70 刚刚看到一个人的网站居然是通过cname访问的
  • ¥15 Attributeerror:super object has no attribute '__sklearn_tags__'_'
  • ¥15 逆置单链表输出不完整
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!