Exercice 3 - Programmation orientée objet · Bac Numérique et Sciences Informatiques Centres étrangers (Afrique) 2026 (jour 1)

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

Énoncé

Cet exercice porte sur la programmation orientée objet, la récursivité et les bases de données relationnelles.

Le champ de mines du démineur est représenté par une grille.

Chaque case de cette grille peut cacher une mine, ou être vide.

Le déroulement du jeu:

Si on choisit sur une case libre qui a au moins une mine dans une case voisine, un chiffre apparaît. Ce chiffre indique combien de mines se trouvent dans les cases voisines. Une case a au maximum 8 cases voisines.

Si on choisit une case vide dont toutes les cases voisines sont vides, la case s'affiche vide. Ensuite, le jeu dévoile automatiquement toutes les cases vides voisines, et ainsi de suite, jusqu'à ce qu'il rencontre des cases avec des chiffres.

La fin de la partie: Si on choisit sur une mine, la partie est perdue. Si on découvre toutes les cases libres, la partie est gagnée.

La figure 1 représente une grille du jeu du démineur de 6 lignes: hauteur et de 7 colonnes: largeur, où l'on a dévoilé la position des 8 mines de la grille représentées par l'entier relatif -1 ainsi que les informations utiles au joueur qui lui seront dévoilées au fur et à mesure du jeu.

La case de coordonnées (1, 2) contient le chiffre 3 car elle a trois de ses cases voisines qui contiennent une mine: les cases (0, 1), (2, 2) et (1, 3).

La case (3, 6) contient le chiffre 0 car aucune case qui lui est voisine ne contient de mine.

Partie A: La classe Demineur

On propose de programmer le jeu du démineur à l'aide du langage de programmation Python. On utilise alors le paradigme de programmation orienté objet. On donne un extrait de la classe Demineur suivante:

class Demineur:

def __init__(self, hauteur, largeur, pourcentage_mines):

'''

Pour un pourcentage de 15,6 on donnera au paramètre

pourcentage_mines la valeur de 0.156.

'''

assert..., 'Le pourcentage de mines doit être compris entre 10% et 30%.'

...hauteur = hauteur

...largeur = largeur

...pourcentage_mines = pourcentage_mines

1.

Recopier et compléter la ligne 7 de l'assertion pour que le pourcentage de mines respecte la précondition recommandée:

2.

Recopier et compléter les lignes 8, 9 et 10 et compléter les pointillés avec le code manquant:

On donne les pourcentages suivants, conçus pour offrir un bon équilibre entre challenge et jouabilité:

Débutant: Grille de 8x8 avec ce qui représente 10 mines, environ 15,6% de mines.

Intermédiaire: Grille de 16x16 cases avec 40 mines, ce qui représente environ 15,6% de mines.

Expert: Grille de 30x16 cases avec 99 mines, ce qui représente environ 20,6% de mines.

3.

Créer une instance demineur_intermediaire, de la classe Demineur en respectant les recommandations pour le niveau de jeu intermédiaire pour le jeu du démineur.

Partie B: Création de la grille du démineur

La grille du jeu du démineur peut être modélisée par un objet Python de type list. Par exemple une grille vide d'un démineur de hauteur 3 et de largeur 5 peut-être représentée par l'objet Python suivant:

grille_vide = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

4.

Recopier et compléter la méthode grille_demineur_vide de la classe Demineur qui permet d'initialiser une grille vide du jeu:

def grille_demineur_vide(self):

return [[0 for _ in range(...)] for _ in range(...)]

On ajoute dans le constructeur de la classe Demineur l'attribut grille_demineur qui va permettre d'initialiser une grille vide:

self.grille_demineur = self.grille_demineur_vide()

Les mines doivent être placées de façon aléatoire dans la grille et seront représentées par l'entier relatif -1.

On donne alors une méthode placer_mines, incomplète, de la classe Demineur.

1 def placer_mines(self):

2 '''

3 Cette fonction doit placer de façon aléatoire les mines dans la

4 grille.

5 Une mine sera représentée par le nombre -1.

6 La méthode permet de mettre à jour l'attribut grille_demineur

7 '''

8 compteur_mines = 0 # Nombre de mines placées dans la grille.

9 # nombre_bombes contient le nombre de mines à placer dans la grille.

10 nombre_bombes = self.largeur*self.hauteur \

11 *self.pourcentage_mines

12 while compteur_mines < nombre_bombes:

13 ligne = randint(0, self.hauteur - 1)

14 colonne = randint(0,...)

15 if self.grille_demineur[...][...] == 0:

16 self.grille_demineur[...][...] = -1

17 compteur_mines =...

5.

Recopier et compléter les lignes 14, 15, 16 et 17 de la méthode placer_mines de la classe demineur:

On dispose des deux méthodes suivantes:

def voisines(self, coordonnees_case):

'''

La méthode voisines renvoie les coordonnées des cases voisines

de la case de la grille dont les coordonnées sont données

par le tuple coordonnees_case passé en paramètre.

Cette méthode renvoie une liste de tuples.

'''

6.

Écrire le code Python de la méthode nombre_voisines_avec_mines. On ne demande pas d'écrire le code de la méthode voisines.

def nombre_voisines_avec_mines(self, coordonnees_case):

7.

Écrire une méthode generer_demineur qui permet de mettre à jour l'attribut grille_demineur pour que chaque cellule ne contenant pas de mine, contienne le nombre de mines qui lui sont voisines.

def generer_demineur(self):

Énoncé: Exercice 3 - Programmation orientée objet · Bac Numérique et Sciences Informatiques Centres étrangers (Afrique) 2026 (jour 1)

Corrigé

Corrigé proposé par AprenAI (non officiel)

1. Recopier et compléter la ligne 7 de l'assertion pour que le pourcentage de mines respecte la précondition recommandée.

Réponse : ```python assert 0.1 <= pourcentage_mines <= 0.3, 'Le pourcentage de mines doit être compris entre 10% et 30%.' ```

2. Recopier et compléter les lignes 8, 9 et 10 et compléter les pointillés avec le code manquant.

Réponse : ```python self.hauteur = hauteur self.largeur = largeur self.pourcentage_mines = pourcentage_mines ```

3. Créer une instance demineur_intermediaire, de la classe Demineur en respectant les recommandations pour le niveau de jeu intermédiaire pour le jeu du démineur.

Réponse : ```python demineur_intermediaire = Demineur(16, 16, 0.156) ```

4. Recopier et compléter la méthode grille_demineur_vide de la classe Demineur qui permet d'initialiser une grille vide du jeu.

Réponse : ```python return [[0 for _ in range(self.largeur)] for _ in range(self.hauteur)] ```

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 1 - Programmation orientée objet · Centres étrangers (Afrique) 2026 (jour 1) · Exercice 1 - Partie A · Centres étrangers (Afrique) 2026 (jour 2) ›

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