25-NSIJ1AN1-1

  1. En suivant l'arbre de décision, le végétal correspondant à cette description est un sorbier.

  2. En suivant l'arbre de décision, la feuille correspondante à cette description est vide, on ne peut donc pas identifier ce végétal.

  3. arbre_2 = Noeud(
        'Simples ?',
        Feuille_resultat([]),
        Noeud(
            'Alternées ?',
            Noeud(
                'Bord denté ?',
                Feuille_resultat(['Sorbier']),
                Feuille_resultat(['Robinier', 'Noyer'])
            ),
            Feuille_resultat([]),
        )
    )
    
  4. class Noeud:
        # ...
        def est_resultat(self):
            return False
    
  5. class Feuille_resultat:
        # ...
        def est_resultat(self):
            return True
    
  6. class Feuille_resultat:
        # ...
        def nb_vegetaux(self):
            return len(self.vegetaux)
    
  7. class Noeud:
        # ...
        def nb_vegetaux(self):
            return self.sioui.nb_vegetaux() + self.sinon.nb_vegetaux()
    
  8. class Feuille_resultat:
        # ...
        def liste_questions(self):
            return []
    
  9. class Noeud:
        # ...
        def liste_questions(self):
            return [self.question] + self.sioui.liste_questions() + self.sinon.liste_questions()
    
  10. def est_bien_renseigne(dico_vegetal, arbre):
        questions = arbre.liste_questions()
        for question in dico_vegetal:
            if question not in questions:
                return False
        return True
    
  11. def identifier_vegetaux(arbre, dico_vegetal)
        while not arbre.est_resultat():
            if dico_vegetal[arbre.question]:
                arbre = arbre.sioui
            else:
                arbre = arbre.sinon
        return arbre.vegetaux