Exercice 3 - Partie A · Bac Numérique et Sciences Informatiques Métropole 2026 (sujet 1)

Thème : Arbres : vocabulaire, mesures et algorithmique · Tiré du sujet Métropole France 1 (2026)

Énoncé

Exercice 3 (8 points)

Cet exercice porte sur les arbres, l'algorithmique des arbres, et les bases de données.

On s'intéresse au fonctionnement interne d'une plateforme en ligne dédiée spécifiquement aux débats. Plutôt que de lister des messages des utilisateurs dans l'ordre chronologique, les différentes contributions sont structurées de façon arborescente afin de mieux comprendre les liens entre les arguments. Chaque contribution vient se rattacher à une affirmation, soit afin d'appuyer cette affirmation avec un argument pour, soit afin de l'attaquer avec un argument contre.

Cet exercice contient deux parties indépendantes l'une de l'autre.

Partie A: structure arborescente des arguments

Dans cette partie on modélise un arbre de débat pour un sujet de débat. La figure 1 montre un exemple d'arbre de débat.

Dans un arbre de débat, chaque nœud est une affirmation, et il y en a de trois sortes:

le sujet du débat (dans le parallélogramme) est une affirmation, c'est le point de départ du débat;

un argument pour (dans un rectangle aux coins arrondis) peut venir soutenir une affirmation, cet argument est lui-même une affirmation;

un argument contre (dans un hexagone) peut venir attaquer une affirmation, cet argument est lui-même une affirmation.

De plus, chaque affirmation peut être likée (j'aime) ou dislikée (je n'aime pas) par les utilisateurs.

1.

Indiquer le nom donné au nœud « point de départ du débat » dans le vocabulaire des arbres.

2.

Indiquer en justifiant si un arbre de débat est un arbre binaire ou non.

On modélise la structure d'arbre de débat à l'aide de la classe suivante:

class Affirmation:

def __init__(self, phrase):

"""

Création d'un objet Affirmation à partir d'une

phrase (str).

"""

self.contenu = phrase

self.sorte = "" # vaudra "sujet", "pour" ou "contre"

# vaut "" avant ajout dans l'arbre

self.arguments = []

self.nb_likes = 0

self.nb_dislikes = 0

3.

Donner le nom et le type de chaque attribut de la classe Affirmation.

On souhaite ajouter à cette classe une méthode soutenir qui permet d'ajouter un argument pour à l'affirmation.

On suppose à disposition une méthode contrer similaire qui permet d'ajouter un argument contre à l'affirmation.

1 def soutenir(self, argument):

2 """

3 Ajoute l'Affirmation `argument` comme argument pour de

4 l'Affirmation `self`.

5

6 Précondition: l'Affirmation ne doit pas avoir déjà été

7 utilisée, ni comme sujet, ni comme pour, ni comme

8 contre, ce qu'on vérifie grâce à son attribut `sorte`.

9 """

10 assert argument.sorte ==...

11....append(argument)

12 argument.sorte = "..."

4.

Recopier et compléter les lignes 10 à 12 de la méthode soutenir, en respectant sa documentation.

Pour mesurer les débats les plus vifs, la plateforme de débats dispose de plusieurs mesures.

5.

Écrire la méthode nb_contre qui permet d'obtenir le nombre d'arguments contre directement rattachés à cette Affirmation.

On s'intéresse à la méthode mystere suivante, qui utilise la méthode nb_contre:

1 def mystere(self):

2 m = self.nb_contre()

3 for arg in self.arguments:

4 candidat = arg.mystere()

5 if candidat > m:

6 m = candidat

7 return m

6.

Expliquer par une phrase ce que renvoie la méthode mystere.

Afin de trancher le débat dans sa globalité, on souhaite évaluer une Affirmation, en tenant compte de la totalité des likes et des dislikes de chaque argument, et en tenant compte du fait que ces arguments soient pour ou contre. Si l'évaluation est positive le pour l'emporte, si elle est négative le contre l'emporte.

La formule pour l'évaluation d'une affirmation correspond à la somme de ses likes et des évaluations de ses arguments pour, à laquelle on soustrait ses dislikes et les évaluations de ses arguments contre.

7.

Écrire, en utilisant uniquement des lignes de code choisies parmi les lignes suivantes, une méthode evaluation qui renvoie le résultat du calcul décrit dans la formule ci-dessus. Les lignes ne sont pas toutes à utiliser et l'indentation est à adapter.

def evaluation(self):

def evaluation():

total = self.nb_likes + self.nb_dislikes

total = self.nb_likes - self.nb_dislikes

total = self.nb_dislikes - self.nb_likes

total = self.nb_likes * self.nb_dislikes

for arg in self.arguments:

for arg in self.arguments_pour:

for arg in self.arguments_contre:

if arg.sorte == "sujet":

if arg.sorte == "pour":

if arg.sorte == "contre":

else:

total = arg.evaluation()

total = total + arg.evaluation()

total = total - arg.evaluation()

total = total * arg.evaluation()

return total

return 1 + total

Énoncé: Exercice 3 - Partie A · Bac Numérique et Sciences Informatiques Métropole 2026 (sujet 1)

Corrigé

Corrigé proposé par AprenAI (non officiel)

1. Indiquer le nom donné au nœud « point de départ du débat » dans le vocabulaire des arbres.

Réponse : racine

2. Indiquer en justifiant si un arbre de débat est un arbre binaire ou non.

Réponse : Non, ce n'est pas un arbre binaire car un nœud peut posséder un nombre quelconque de fils (strictement supérieur à deux). Par exemple, sur la figure 1, la racine possède 4 nœuds enfants.

3. Donner le nom et le type de chaque attribut de la classe Affirmation.

Réponse : - `contenu` : chaîne de caractères (`str`) - `sorte` : chaîne de caractères (`str`) - `arguments` : liste (`list`) - `nb_likes` : entier (`int`) - `nb_dislikes` : entier (`int`)

4. Recopier et compléter les lignes 10 à 12 de la méthode soutenir, en respectant sa documentation.

Réponse : assert argument.sorte == "" self.arguments.append(argument) argument.sorte = "pour"

Les réponses des 3 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium

Résous-le ici : correction automatique, indices et corrigé détaillé.

Exercice 3 - Partie D : Arbres binaires de recher… · Métropole 2025 (sujet 1) ›

Plus d’exercices d’Arbres : vocabulaire, mesures et algorithmique