Exercice 2 - Programmation orientée objet · Bac Numérique et Sciences Informatiques Asie 2026 (jour 1)

Thème : Programmation orientée objet : classes, attributs, méthodes · Tiré du sujet Jour 1 (2026)

Énoncé

Exercice 2 (6 points)

Cet exercice porte sur les thèmes langages, programmation et algorithmique.

Dans le cadre d’un concours national intitulé “Jeunes Talents IA 2025”, une équipe constituée d’élèves de terminale NSI est sélectionnée pour développer un système d’intelligence artificielle capable de détecter si un email est un spam ou non pour la messagerie d’un établissement scolaire. Après réflexion, l’équipe décide d’utiliser un perceptron pour classer les messages comme spam ou non spam.

Le perceptron est un neurone artificiel qui imite très simplement le fonctionnement d’un neurone biologique. L’équipe choisit d’entraîner le perceptron à l’aide d’un algorithme d’apprentissage supervisé: on présente au perceptron des exemples, avec les bonnes réponses, afin qu’il ajuste automatiquement ses poids dans le but d’améliorer ses prédictions.

Le fonctionnement d’un perceptron est décrit ci-après:

Le perceptron dispose d’un tuple de nn poids p=(p1,p2,p3,…,pn)p = (p_1, p_2, p_3, \dots, p_n) et d’un biais bb. Il reçoit en entrée un tuple de nn valeurs numériques d’entrée x=(x1,x2,x3,…,xn)x = (x_1, x_2, x_3, \dots, x_n).

Il calcule la somme pondérée avec biais des valeurs d’entrées:

somme=x1×p1+x2×p2+⋯+xn×pn+b\text{somme} = x_1 \times p_1 + x_2 \times p_2 + \dots + x_n \times p_n + b

Puis il applique une fonction d’activation. Dans cet exercice la fonction d’activation est la fonction seuil qui renvoie 1 si la somme pondérée avec biais est supérieure ou égale à 0, et 0 sinon.

Le schéma ci-dessus illustre le cas n=2n = 2.

Pour commencer, l’équipe considère un perceptron à deux entrées ayant pour caractéristiques les poids p1=0.7p_1 = 0.7 et p2=−0.2p_2 = -0.2, et un biais b=0.1b = 0.1.

Voici le début d’une classe DetecteurSpam basée sur un perceptron:

class DetecteurSpam:

def __init__(self, nb_entrees):

self.biais = 0.0

self.poids = [0.0 for i in range(nb_entrees)]

def get_biais(self):

return self.biais

def set_biais(self, nouveau_biais):

self.biais = nouveau_biais

def get_poids(self):

return self.poids

def set_poids(self, nouveaux_poids):

assert len(nouveaux_poids) == len(self.poids)

self.poids = nouveaux_poids

1.

Calculer la valeur somme de la somme pondérée avec biais du perceptron lorsque les valeurs d'entrée sont x1=1x_1 = 1 et x2=3x_2 = 3 et en déduire la valeur de sortie sortie du perceptron si la fonction d'activation est la fonction seuil (sortie à 1 si somme supérieure ou égale à 0, sinon 0).

2.

Donner le nom d'une méthode et le nom d'un attribut de cette classe.

3.

Donner une suite d'instructions Python permettant de créer un objet detecteur (instance de la classe DetecteurSpam) correspondant à un détecteur à deux entrées, puis de remplacer ses poids et son biais par les valeurs p1=0.7p_1 = 0.7, p2=−0.2p_2 = -0.2 et b=0.1b = 0.1 en utilisant les méthodes de la classe.

4.

Expliquer le rôle de la ligne 16 du code ( assert len(nouveaux_poids) == len(self.poids)).

5.

Écrire la méthode fonction_activation qui prend en paramètre valeur un nombre et qui renvoie 1 si valeur est supérieur ou égal à 0, et 0 sinon.

6.

Recopier et compléter la méthode prediction.

def prediction(self, entrees):

somme = 0

for i in range(len(entrees)):

somme +=...

somme +=...

sortie = self.fonction_activation(...)

return...

8.

Un des membres de l'équipe propose les listes echantillon et cibles suivantes pour tester la méthode entrainement:

echantillon = [[0.5, 0.3], [0.2, 0.1], [0.4, 0.8], [0.7, 0.9]]

cibles = [0, 1, 1, 1]

Donner les valeurs de echantillon[1] et echantillon[2][1].

9.

Recopier et compléter les lignes 5, 7, 8 et 13 du code de la méthode entrainement.

10.

L'équipe veut maintenant créer un détecteur de spam à 2 caractéristiques d'entrée et l'entraîner sur les données du tableau ci-dessous pour apprendre à détecter les emails avec "URGENT" ET "GRATUIT".

Contient "URGENT" ?

Contient "GRATUIT" ?

Est un SPAM ?

0 (non) · 0 (non) · 0 (non)

0 (non) · 1 (oui) · 0 (non)

1 (oui) · 0 (non) · 0 (non)

1 (oui) · 1 (oui) · 1 (oui)

Écrire un programme permettant de créer et d'entraîner le détecteur sur les listes emails = [[0, 0], [0, 1], [1, 0], [1, 1]] et spams = [0, 0, 0, 1] pendant au maximum 1000 époques, puis d'afficher dans la console le nombre d'époques nécessaires pour que le détecteur ne fasse plus d'erreurs (si c'est possible), et -1 sinon.

Énoncé: Exercice 2 - Programmation orientée objet · Bac Numérique et Sciences Informatiques Asie 2026 (jour 1)

Corrigé

Corrigé proposé par AprenAI (non officiel)

1. Calculer la valeur somme de la somme pondérée avec biais du perceptron lorsque les valeurs d'entrée sont x1=1x_1 = 1 et x2=3x_2 = 3

Réponse : 0.2

1. en déduire la valeur de sortie sortie du perceptron si la fonction d'activation est la fonction seuil

Réponse : 1

2. Donner le nom d’une méthode de cette classe.

Réponse : __init__ / get_biais / set_biais / get_poids / set_poids

2. Donner le nom d'un attribut de cette classe.

Réponse : biais / poids / self.biais / self.poids

3. Donner une suite d’instructions Python permettant de créer un objet detecteur (instance de la classe DetecteurSpam) correspondant à un détecteur à deux entrées, puis de remplacer ses poids et son biais par les valeurs p1 = 0.7, p2 = -0.2 et b = 0.1 en utilisant les méthodes de la classe.

Réponse : ```python detecteur = DetecteurSpam(2) detecteur.set_poids([0.7, -0.2]) detecteur.set_biais(0.1) ```

4. Expliquer le rôle de la ligne 16 du code (assert len(nouveaux_poids) == len(self.poids)).

Réponse : Elle vérifie que la liste nouveaux_poids contient le même nombre d'éléments que la liste des poids actuels du perceptron.

5. Écrire la méthode fonction_activation qui prend en paramètres valeur un nombre et qui renvoie 1 si valeur est supérieur ou égal à 0, et 0 sinon.

Réponse : ```python def fonction_activation(self, valeur): if valeur >= 0: return 1 else: return 0 ```

6. Recopier et compléter la méthode prediction.

Réponse : ```python def prediction(self, entrees): somme = 0 for i in range(len(entrees)): somme += entrees[i] * self.poids[i] somme += self.biais sortie = self.fonction_activation(somme) return sortie ```

Les réponses des 7 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 1 - Programmation orientée objet · Asie 2026 (jour 2) ›

Plus d’exercices de Programmation orientée objet : classes, attributs, méthodes