Au cœur du développement technologique, les interfaces conversationnelles, ou chatbots, jouent un rôle de plus en plus important dans l’interaction avec les utilisateurs. La start-up OpenChat souhaite développer un chatbot qui utilise une base de données pour stocker des questions et les réponses associées.

mots clés : BDD, POO, SQL, arbres binaires de recherche

🔎 Voir les exercices similaires ↓

📘 Sujet PDF

Polynésie – Bac NSI 2026 – Jour 1 Énoncé de l'exercice 3

Cet exercice porte sur le paradigme « Programmation orientée objet », les bases de données et les arbres binaires de recherche.

Introduction : au cœur du développement technologique, les interfaces conversationnelles, ou chatbots, jouent un rôle de plus en plus important dans l’interaction avec les utilisateurs. La start-up OpenChat souhaite développer un chatbot qui utilise une base de données pour stocker des questions et les réponses associées.

Partie 1 : Structures de données

On souhaite créer une classe Chatbot ayant un attribut base_donnees initialisé comme un dictionnaire vide.

On utilisera ensuite l’attribut base_donnees qui permettra de stocker les questions en tant que clés du dictionnaire et les réponses à ces questions en tant que valeurs associées à ces clés.

On définit également deux méthodes permettant de faire fonctionner le chatbot :

  • une méthode ajouter_question_reponse permet l’ajout dans le dictionnaire base_donnees de la valeur reponse associée à la clé question ;

  • une méthode repondre renvoie la réponse associée à une question.

  1. Recopier et compléter les lignes 3 et 6 dans le constructeur de la classe Chatbot et dans la méthode ajouter_question_reponse.

1 class Chatbot:
2     def __init__(self):
3         self.base_donnees = ...   # à compléter
4
5     def ajouter_question_reponse(self, question, reponse):
6         self.base_donnees[question] = ...   # à compléter
7
8     def repondre(self, question):
9         return self.base_donnees[question]

Nous allons maintenant illustrer quelques interactions possibles entre un utilisateur et le chatbot, en se basant sur la classe précédemment définie.

  1. Écrire les lignes de code permettant d’instancier un objet Bot1 de la classe Chatbot et d’ajouter à son dictionnaire l’interaction :

Question : « Bonjour, comment vas-tu ? » – Réponse : « Bonjour, je vais bien, merci. »

  1. Écrire les lignes de code permettant d’obtenir la réponse à la question « Bonjour, comment vas-tu ? ».

Partie 2 : Interaction avec la base de données

Cette partie porte sur les bases de données. On pourra utiliser les mots clés SQL suivants : AND, FROM, INSERT, INTO, JOIN, OR, ON, SELECT, SET, UPDATE, VALUES, WHERE.

On considère une table questions_reponses avec les colonnes id, question, reponse et mot_cle.

  1. Associer à chaque mot clé sa définition :

    • mots clés : SELECT – INSERT – UPDATE ;

    • définitions : ajouter une donnée – extraire des données – mettre à jour une table.

  2. Définir ce qu’est une clé primaire.

  3. Indiquer quel attribut (éventuellement plusieurs) serait le plus adapté pour être une clé primaire dans la table questions_reponses et justifier votre choix.

  4. Écrire une requête permettant de récupérer toutes les questions comportant comme mot-clé « python ».

  5. Écrire une requête pour insérer la nouvelle question-réponse « Date de la bataille de Marignan ? », « 1515 » associée au mot-clé « Histoire ». On prendra comme identifiant id = 15.

  6. Écrire la requête pour mettre à jour la réponse à la question d’id = 12 qui devient « Oui ».

Partie 3 : Représentation de la recherche avec les arbres

On considère cet exemple d’un arbre binaire de recherche (ABR) basé sur le mot-clé des questions :

Figure 1. ABR des mots-clés
  1. Indiquer quel type de parcours donnerait, dans cet ordre : IA, bot, programmation, algo, chatbot, informatique, python.

  2. Indiquer dans quel ordre apparaîtraient les mots-clés avec un parcours en profondeur infixe sur l’ABR illustré.

  3. Indiquer dans quel ordre apparaîtraient les mots-clés pour un parcours en profondeur postfixe (ou suffixe).

  4. Indiquer quel parcours permettrait d’obtenir les mots-clés dans l’ordre alphabétique.

  5. Compléter la méthode de recherche dans l’ABR :

 1 class Noeud:
 2
 3     def __init__(self, cle):
 4         self.cle = cle
 5         self.gauche = None
 6         self.droit = None
 7
 8     def recherche(arbre, cle):
 9         if arbre is None or arbre.cle == ...:   # à compléter
10             return arbre
11         if cle < arbre.cle:
12             return recherche(arbre. ..., cle)   # à compléter
13         else:
14             return recherche(arbre. ..., cle)   # à compléter
▶✅ Correction (cliquer pour afficher) PDF

Polynésie – Bac NSI 2026 – Jour 1 Correction de l'exercice 3

Partie 1 : Structures de données

1. Lignes 3 et 6

class Chatbot:
    def __init__(self):
        self.base_donnees = {}

    def ajouter_question_reponse(self, question, reponse):
        self.base_donnees[question] = reponse

    def repondre(self, question):
        return self.base_donnees[question]

2. Instancier Bot1 et ajouter l’interaction

Bot1 = Chatbot()
Bot1.ajouter_question_reponse("Bonjour, comment vas-tu ?", "Bonjour, je vais bien, merci.")

3. Obtenir la réponse

print(Bot1.repondre("Bonjour, comment vas-tu ?"))

Partie 2 : Interaction avec la base de données

4. Mots clés et définitions

mot clé définition
SELECT extraire des données
INSERT ajouter une donnée
UPDATE mettre à jour une table

5. Clé primaire

Une clé primaire est un attribut (ou un ensemble d’attributs) dont la valeur identifie de façon unique chaque ligne de la table : deux lignes ne peuvent pas avoir la même valeur.

6. Clé primaire de questions_reponses

L’attribut id : c’est un identifiant numérique, unique pour chaque question. Une question pourrait être reformulée ou avoir des doublons, et plusieurs questions partagent le même mot_cle ou la même réponse.

7. Questions ayant le mot-clé python

SELECT question
FROM questions_reponses
WHERE mot_cle = 'python';

8. Insérer la question sur Marignan

INSERT INTO questions_reponses (id, question, reponse, mot_cle)
VALUES (15, 'Date de la bataille de Marignan ?', '1515', 'Histoire');

9. Mettre à jour la réponse de la question 12

UPDATE questions_reponses
SET reponse = 'Oui'
WHERE id = 12;

Partie 3 : Représentation de la recherche avec les arbres

10. IA, bot, programmation, algo, chatbot, informatique, python

On visite les nœuds niveau par niveau : c’est un parcours en largeur.

11. Parcours infixe

algo, bot, chatbot, IA, informatique, programmation, python.

12. Parcours postfixe (suffixe)

algo, chatbot, bot, informatique, python, programmation, IA.

13. Ordre alphabétique

Le parcours infixe donne les mots-clés dans l’ordre alphabétique, puisque l’arbre est un ABR.

▶ Animation : les quatre parcours de l’ABR des mots-clés

Choisissez un parcours puis avancez nœud par nœud : le nœud visité est en bleu, ceux déjà visités en vert.

14. Méthode de recherche

def recherche(arbre, cle):
    if arbre is None or arbre.cle == cle:
        return arbre
    if cle < arbre.cle:
        return recherche(arbre.gauche, cle)
    else:
        return recherche(arbre.droit, cle)

Une erreur, un oubli ? Écrivez-moi : frederic.peuriere@lfcl.pt

💻 Console Python (cliquer pour afficher)

🔎 Exercices sur des thèmes similaires