猿问

TypeError: unorderable types: Tree() < int()

我在 python 2 中运行了这个霍夫曼编码代码,它运行顺利。但是,在 python 3 中,它给了我一个如上所述的错误。我知道类型不相同(因此无法比较)但我应该如何解决这个问题?


请注意,该错误特别指出q.put((kiri[0]+kanan[0],node)),我认为问题在于优先级队列中的比较。


导致错误的输入示例:


3

1

2

3

第一行是指字符数。接下来的几行显示第一个字符、第二个字符等的频率。


请注意,如果第一行小于 3,代码会以某种方式运行。例如:


2

1

2

工作得很好


任何帮助是极大的赞赏。谢谢!


n=list(map(int, input().split()))

n=n[0]

li=[None]*n

for i in range(n):

    inp=list(map(int, input().split()))

    li[i]=inp[0]

char=[None]*n

index=1

for i in range(n):

    char[i]=index

    index+=1

freq=list(zip(li,char))


import queue


class Tree:

    def __init__(self,kanan,kiri):

        self.kanan=kanan

        self.kiri=kiri

    def anak(self):

        return int((self.kanan,self.kiri))



q=queue.PriorityQueue()

for nilai in freq:

    q.put(nilai) 

size=q.qsize()

for i in range(size,1,-1):       

    kanan=q.get()

    kiri=q.get()

    node=Tree(kanan,kiri)

    q.put((kiri[0]+kanan[0],node))

huffmantree=q.get()


def traverse(huffmantree,st,pref):

    if isinstance(huffmantree[1].kanan[1],Tree):

        traverse(huffmantree[1].kanan,st,pref+"0")

    else: st[huffmantree[1].kanan[1]]=pref+"0"

    if isinstance(huffmantree[1].kiri[1],Tree):

        traverse(huffmantree[1].kiri,st,pref+"1")

    else: st[huffmantree[1].kiri[1]]=pref+"1"

    return st


binarystring=traverse(huffmantree,{},"")

for i in freq: print(binarystring[i[1]])


LEATH
浏览 247回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答