Les fonctions serialize et unserialize ne sont pas disponibles et ne doivent pas être utilisées dans cette partie du projet.
Pour rappel, l'évaluation consiste à remplacer chaque occurrence d'une variable dans l'arbre par sa valeur (float). Pour cela, un dictionnaire var_values doit avoir pour clés toutes les variables présentes dans l'arbre et, pour chacune de ces clés, le dictionaire définit la valeur à laquelle assigner la variable correspondante. A chaque étape, les valeurs calculées sont arrondies si digits >= 0.
Un appel de cette fonction pour l'arbre t4 qui contiendrait les variables x et y est donc par exemple:
t4 = Tree('/', [Tree('x'), Tree('y')])
evaluate(t4, var_values={'x': 2.45, 'y': -3.33}, digits=2)
Trucs et astuces
Pensez d'abord aux cas de base.
Pour pouvoir évaluer la valeur en un noeud interne de l'arbre, il est indispensable de connaître déjà la valeur de ses enfants. Cette propriété est essentielle pour déterminer comment organiser la récursion.
L'évaluation d'un arbre peut générer une erreur si l'évaluation se fait en dehors du domaine de la fonction mathématique représentée par cet arbre. Par exemple :
t5 = Tree('/', [Tree(1), Tree('x')]) evaluate(t5, {'x': 0.0}) ZeroDivisionError: float division by zeroIl ne s'agit pas ici d'une erreur du programme. Simplement, la fonction représentée par l'arbre est \(\frac{1}{x}\) et cette fonction n'est pas définie si \(x = 0\) (en d'autres termes, 0 est en dehors du domaine de la fonction). Vous n'avez donc pas à vous soucier de ce genre d'erreur si votre programme genère une exception de ce genre lorsque l'évaluation est lancée en dehors du domaine de définition de la fonction mathématique représentée par l'arbre passé en premier argument à la fonction
evaluate.Il est utile d'importer le module
math(ou certaines fonctions incluses dans ce module) pour pouvoir effectivement évaluer des fonctions mathématiques. Cela ne change pas le fait que votre fonctionevaluatedevra parcourir récursivement l'arbre passé en paramètre pour évaluer la valeur globale de cet arbre.
INGInious