Exercice 3 - Programmation orientée objet · Bac Numérique et Sciences Informatiques Métropole 2024 (sujet 1)

Thème : Programmation orientée objet : classes, attributs, méthodes · Tiré du sujet Métropole France 1 (2024)

Énoncé

EXERCICE 3 (8 points)

Cet exercice porte sur la programmation orientée objet, sur les arbres binaires de recherche et la récursivité.

Chaque année, plusieurs courses de chiens de traîneaux sont organisées sur les terrains enneigés. L'une d'elle, La Traversée Blanche, est une course se déroulant en 9 étapes. L'organisateur de cette course est chargé de créer un programme Python pour aider à la bonne gestion de l'événement.

Partie A: la classe Chien

Afin de caractériser un chien, l'organisateur décide de créer une classe Chien avec les attributs suivants:

id_chien, un nombre entier correspondant au numéro attribué au chien lors de son inscription à la course;

nom, une chaîne de caractères correspondant au nom du chien;

role, une chaîne de caractères correspondant au poste occupé par le chien: en fonction de sa place dans l'attelage, un chien a un rôle bien défini et peut être 'leader', 'swing dog', 'wheel dog' ou 'team dog';

id_proprietaire, un nombre entier correspondant au numéro de l'équipe.

Le code Python incomplet de la classe Chien est donné ci-dessous:

class Chien:

def __init__(self, id_chien, nom, role, id_prop):

self.id_chien = id_chien

self.nom = nom

self.role = role

self.id_proprietaire = id_prop

def changer_role(self, nouveau_role):

"""Change le rôle du chien avec la valeur passée en paramètre."""

...

Voici un extrait des informations dont on dispose sur les chiens inscrits à la course:

Chiens inscrits à la course

id_chien

nom

role

id_proprietaire

40 · Duke · wheel dog · 10

41 · Sadie · team dog · 10

42 · Zeus · swing dog · 11

43 · Roxie · swing dog · 11

44 · Scout · team dog · 11

45 · Ginger · team dog · 11

46 · Helka · team dog · 11

Suite aux inscriptions, l'organisateur procède à la création de tous les objets de type Chien et les stocke dans des variables en choisissant un nom explicite. Ainsi, l'objet dont l'attribut id_chien a pour valeur 40 est stocké dans la variable chien40.

1.

Écrire l'instruction permettant d'instancier l'objet chien40 caractérisant le chien ayant le numéro d'inscription 40.

2.

Selon l'état de fatigue de ses chiens ou du profil de l'étape, le musher (nom donné à la personne qui conduit le traîneau) peut décider de changer le rôle des chiens dans l'attelage.

Recopier et compléter la méthode changer_role de la classe Chien.

3.

Le propriétaire de Duke décide de lui attribuer le rôle de 'leader'.

Écrire l'instruction permettant d'effectuer cette modification.

Partie B: la classe Equipe

On souhaite à présent créer une classe Equipe ayant les attributs suivants:

num_dossard, un nombre entier correspondant au numéro inscrit sur le dossard du musher;

nom_equipe, une chaîne de caractères correspondant au nom de l'équipe;

liste_chiens, une liste d'objets de type Chien dont chaque élément correspond à un chien au départ de l'étape du jour;

temps_etape, une chaîne de caractères (par exemple '2h34') représentant le temps mis par l'équipe pour parcourir l'étape du jour;

liste_temps, une liste de chaînes de caractères permettant de stocker les temps de l'équipe pour chacune des 9 étapes.

On donne le code Python suivant de la classe Equipe:

class Equipe:

def __init__(self, num_dossard, nom_equipe):

self.num_dossard = num_dossard

self.nom_equipe = nom_equipe

self.liste_chiens = []

self.temps_etape = ''

self.liste_temps = []

def ajouter_chien(self, chien):

self.liste_chiens.append(chien)

def retirer_chien(self, numero):

...

def ajouter_temps_etape(self, temps):

self.liste_temps.append(temps)

Pour la première étape, le musher de l'équipe numéro 11, représentée en Python par l'objet eq11, décide de constituer une équipe avec les quatre chiens identifiés par les numéros 42, 44, 45 et 46. On donne ci-dessous les instructions Python permettant de créer l'équipe eq11 et l'attelage constitué des 4 chiens précédents:

eq11 = Equipe(11, 'Malamutes Endurants')

eq11.ajouter_chien(chien42)

eq11.ajouter_chien(chien44)

eq11.ajouter_chien(chien45)

eq11.ajouter_chien(chien46)

Malheureusement, le musher s'aperçoit que sa chienne Helka, chien numéro 46, n'est pas au mieux de sa forme et il décide de la retirer de l'attelage.

4.

Recopier et compléter la méthode retirer_chien ayant pour paramètre numero, un entier correspondant au numéro attribué au chien lors de l'inscription, et permettant de mettre à jour l'attribut liste_chiens après retrait du chien dont la valeur de l'attribut id_chien est numero.

5.

En vous aidant de la fonction précédente, écrire l'instruction qui permet de retirer Helka de l'attelage de l'équipe eq11.

On donne à présent le code Python d'une fonction convert prenant pour paramètre chaine, une chaîne de caractères représentant une durée, donnée en heure et minute.

On supposera que cette durée est toujours strictement inférieure à 10 heures, temps maximal fixé par le règlement pour terminer une étape.

def convert(chaine):

heure_dec = int(chaine[0]) + int(chaine[2] + chaine[3])/60

return heure_dec

6.

Indiquer le résultat renvoyé par l'appel convert('4h36').

7.

Écrire une fonction temps_course qui prend pour paramètre equipe de type Equipe et qui renvoie un nombre flottant correspondant au cumul des temps de l'équipe equipe à l'issue des 9 étapes de la course.

On rappelle que la classe Equipe dispose d'un attribut liste_temps.

Énoncé: Exercice 3 - Programmation orientée objet · Bac Numérique et Sciences Informatiques Métropole 2024 (sujet 1)

Corrigé

Corrigé proposé par AprenAI (non officiel)

1. Écrire l'instruction permettant d'instancier l'objet chien40 caractérisant le chien ayant le numéro d'inscription 40.

Réponse : chien40 = Chien(40, 'Duke', 'wheel dog', 10)

2. Recopier et compléter la méthode changer_role de la classe Chien.

Réponse : def changer_role(self, nouveau_role): self.role = nouveau_role

3. Le propriétaire de Duke décide de lui attribuer le rôle de 'leader'. Écrire l'instruction permettant d'effectuer cette modification.

Réponse : chien40.changer_role('leader')

4. Recopier et compléter la méthode retirer_chien ayant pour paramètre numero.

Réponse : def retirer_chien(self, numero): for chien in self.liste_chiens: if chien.id_chien == numero: self.liste_chiens.remove(chien)

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 2 - Partie C · Métropole 2 remplacement 2025 · Exercice 2 - Partie A · Métropole 2024 (sujet 2) ›

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