'Don't understand my assertion error for Huffman tree project
For our class project we need to do an Huffman implementation in Python, but turns out it's quite hard and ressources online usually don't match with my code.
There is already a function that "scans" a txt file and some other functions with help function to create a tree and then I did a function to create a list of all these Nodes.
Here is my current Huffman Python implementation :
def dictionnaire(fichier):
with open(fichier, "r", encoding='utf-8') as txt:
texte = txt.read()
dictionnaire1 = {}
for lettre in texte:
if lettre not in dictionnaire1:
dictionnaire1[lettre] = 0
if lettre in dictionnaire1:
dictionnaire1[lettre] += 1
return dictionnaire1
print(dictionnaire("testpy.txt"))
print()
assert dictionnaire("testpy.txt") == {'T': 1, 'e': 2, 's': 1, 't': 2, ' ': 1, 'p': 1, 'r': 1, 'o': 1, 'j': 1}
class Noeud:
""" un noeud d'un arbre binaire"""
def __init__(self, g, v, o, d):
self.gauche = g
self.valeur = v
self.occurence = o
self.droit = d
def modifier_fils_droit(self, d):
self.droit = d
def modifier_fils_gauche(self, g):
self.gauche = g
def fils_droit(self):
return self.droit
def fils_gauche(self):
return self.gauche
def valeur(self):
return self.valeur
def occurence(self):
return self.occurence
def donnee(self):
""" Donne l'étiquette (la donnée)"""
return self.valeur
def __str__(self):
return 'Valeur : ' + str(self.valeur) + \
' et Occurence : ' + str(self.occurence)
# Structure du dict :
dict_exemple = {'a': 21,
'b': 15,
'c': 30,
'd': 9,
'e': 5,
'f': 7}
print(dict_exemple.values())
print(dict_exemple)
for key, value in dict_exemple.items():
print( key, value )
a = Noeud(None, "e", 8, None)
print(a)
def creer_liste(dict):
lst = []
for key, value in dict.items():
lst.append(Noeud(None, key, value, None))
# print(Noeud(None, key, value, None))
return lst
def minimum(lst):
"""Retourne le minimum de la liste d'arbres."""
mini = 0
for i in range(len(lst)):
if lst[i].occurence < lst[mini].occurence:
mini = i
return mini
print("i_min : " + str(minimum(creer_liste(dict_exemple))))
def creer_arbre(lst):
L = []
while len(lst) > 1:
a1 = lst.pop(minimum(lst))
a2 = lst.pop(minimum(lst))
a = Noeud(a1, None, a1.occurence + a2.occurence, a2)
L.append(a)
print(a)
print(a.fils_gauche())
print(a.fils_droit())
return L
j = Noeud(None, 'c', 30, None)
i = Noeud(None, 'a', 21, None)
h = Noeud(i, None, 51, j)
f = Noeud(None, 'b', 15, None)
e = Noeud(None, 'd', 9, None)
d = Noeud(e, None, 24, f)
c = Noeud(None, 'f', 7, None)
b = Noeud(None, 'e', 5, None)
a = Noeud(b, None, 12, c)
assert creer_arbre(creer_liste(dict_exemple)) == [a, d, h]
print(creer_liste(dict_exemple))
print()
print(creer_arbre(creer_liste(dict_exemple)))
It prints this btw :
dict_values([21, 15, 30, 9, 5, 7])
{'a': 21, 'b': 15, 'c': 30, 'd': 9, 'e': 5, 'f': 7}
a 21
b 15
c 30
d 9
e 5
f 7
Valeur : e et Occurence : 8
i_min : 4
Valeur : None et Occurence : 12
Valeur : e et Occurence : 5
Valeur : f et Occurence : 7
Valeur : None et Occurence : 24
Valeur : d et Occurence : 9
Valeur : b et Occurence : 15
Valeur : None et Occurence : 51
Valeur : a et Occurence : 21
Valeur : c et Occurence : 30
I know a lot of variables are in French but those words are very similar in English.
I am not a pro in Python so not sure what is going wrong. Thanks a lot in advance.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
