Exercice 2 Polynésie – Bac NSI 2025 – Jour 2

🔥🔥🔥🔥🔥
Cet exercice porte sur la programmation Python, la programmation orientée objet, les bases de données relationnelles et les requêtes SQL. Nous allons utiliser une base de données sur les champignons.

mots clés: programmation, POO, BDD, SQL

🔎 Voir les exercices similaires ↓

📘 Sujet PDF

Polynésie – Bac NSI 2025 – Jour 2 Énoncé de l'exercice 2

Cet exercice porte sur la programmation Python, la programmation orientée objet, les bases de données relationnelles et les requêtes SQL. Cet exercice est composé de deux parties indépendantes.

Partie A

Dans cette partie, nous allons utiliser une base de données sur les champignons. Le tableau ci-dessous nous donne un extrait du résultat obtenu, après avoir effectué la requête suivante :

SELECT * FROM champignon;
champignon
idnomid_ordrelamellecouleurchapeau_minchapeau_maxpied_minpied_max
1champignon de Paris1ouiblanc41025
2champignon noir2nonnoir21000
3coprin chevelu1ouiblanc5201040
4bolet à pied rouge3nonjaune719515
5amanite des Césars4ouiorange820815

Les attributs nom, lamelle et couleur sont des chaînes de caractères. La taille du chapeau et la longueur du pied des champignons sont des nombres exprimés en centimètres.

  1. Mathilde vient de trouver un champignon avec des lamelles et de couleur orange. Écrire la requête qu’elle doit écrire pour avoir la liste des noms des champignons possibles pour sa trouvaille.

  2. Par ailleurs, Romain a trouvé un champignon sans pied et un chapeau de 15 cm. Écrire la requête qu’il doit écrire pour avoir la liste des noms des champignons possibles pour son spécimen.

Les champignons sont classés selon différents ordres selon la table ordre suivante où l’on trouve également la classe à laquelle appartient chaque ordre. Voici le contenu de la table ordre.

ordre
idnomclasse
1agaricalesagaricomycètes
2trémellalesphragmabasidiomycètes
3bolétalesagaricomycètes
4amanitalesagaricomycètes
5cantharellalesagaricomycètes
6polyporalesbasidiomycètes
7clavarialeshomobasidiomycètes
8tricholomatalesagaricomycètes
  1. Donner la clé étrangère de la table champignon faisant référence à la clé primaire id de la table ordre.

  2. Écrire la requête permettant d’obtenir la liste des noms des champignons appartenant à la classe des agaricomycètes.

Le champignon nommé amanite solitaire est un champignon blanc qui appartient à l’ordre des amanitales. Il possède des lamelles. Son chapeau mesure entre 6 et 20 cm et son pied entre 4 et 10 cm.

  1. Écrire une requête permettant d’ajouter ce champignon avec l’id 56 dans la table champignon.

On décide d’ajouter les différentes toxicités des champignons en ajoutant un attribut id_toxicite dans la relation champignon et une table toxicite. Voici le contenu de la table toxicite :

toxicite
id_toxtypeeffets
1très toxiqueEntrainant la mort
2toxiqueEntrainant des problèmes digestifs ou nerveux
3à rejeterChampignons suspects ou ayant un mauvais goût
4comestibleChampignons pouvant être consommés
  1. Écrire le schéma relationnel de la base de données contenant ces trois tables en soulignant les clés primaires et en faisant précéder les clés étrangères du caractère #.

Une erreur s’est glissée dans la table champignon : le champignon de nom amanite citrine est très toxique car son ingestion peut entraîner la mort.

  1. Écrire la requête permettant de corriger cette erreur dans la table champignon.

  2. Écrire une requête permettant d’obtenir les noms des champignons de l’ordre des amanitales de toxicité très toxique.

Partie B

Quentin fait quelques recherches afin de trouver les recettes possibles avec des champignons selon les saisons. Il trouve notamment les informations suivantes pour le lactaire délicieux :

Lactaire délicieux :

  • localisation : sous les pins

  • saison : été

  • recette : lactaires grillés à l’huile d’olive

  • cuisson : 12 minutes à feu moyen

Pour chaque champignon, il souhaite stocker les informations dans un objet de la classe Champignon définie ci-dessous :

class Champignon():
   def __init__(self, nom, lieu, saison, recette, cuisson):
      self.nom = nom
      self.localisation = lieu
      self.saison = saison
      self.recette = recette
      self.cuisson = cuisson

Donc l’instruction permettant d’instancier l’objet champignon1 du champignon lactaire délicieux est la suivante :

champignon1 = Champignon('Lactaire délicieux', 'Sous les pins', 'été', 'Lactaires grillés à l\'huile d\'olive', '12 minutes à feu moyen')

Quentin décide de stocker l’ensemble des instances de classe Champignon dans une variable liste_champi de type list.

  1. Recopier et compléter le programme ci-dessous permettant d’afficher le(s) nom(s) des champignons que l’on trouve lors de la saison été.

for e in liste_champi:
    if ...... == 'été':
        print(...)

La plaque de cuisson de Quentin est défectueuse. Il ne peut cuire des aliments qu’à feu moyen. Il écrit donc rapidement le programme suivant afin de savoir s’il peut cuire ses champignons à feu moyen.

for c in liste_champi:
   if c.nom == 'Lactaire délicieux':
      return c.cuisson == 'feu moyen'

Ce programme renvoie False, alors que le lactaire délicieux se cuisine bien à feu moyen.

  1. Expliquer pourquoi il n’obtient pas le résultat attendu alors que Quentin n’a fait aucune erreur dans sa liste de champignons.

Malgré ce problème, Quentin ne souhaite pas modifier son travail et téléphone à son ami Iris qui lui fournit une fonction recherche_textuelle qui prend en paramètre deux chaines de caractères texte et mot et qui retourne True si mot est un mot appartenant à texte et False sinon.

>>> recherche_textuelle('dans une forêt', 'forêt')
True
>>> recherche_textuelle('près de la mer', 'mare')
False
  1. Corriger le programme de la question précédente en utilisant la fonction recherche_textuelle.

▶✅ Correction (cliquer pour afficher) PDF

Polynésie – Bac NSI 2025 – Jour 2 Correction de l'exercice 2

Partie A – Base de données

1. Champignon à lamelles de couleur orange

SELECT nom
FROM champignon
WHERE lamelle = 'oui' AND couleur = 'orange';

2. Champignon sans pied, au chapeau de 15 cm

SELECT nom
FROM champignon
WHERE pied_max = 0
AND chapeau_min <= 15 AND chapeau_max >= 15;

3. Clé étrangère vers la table ordre

C’est l’attribut id_ordre de la table champignon : il référence l’attribut id de la table ordre.

4. Champignons de la classe des agaricomycètes

SELECT champignon.nom
FROM champignon
JOIN ordre ON champignon.id_ordre = ordre.id
WHERE ordre.classe = 'agaricomycètes';

5. Ajout de l’amanite solitaire

INSERT INTO champignon
VALUES (56, 'amanite solitaire', 4, 'oui', 'blanc', 6, 20, 4, 10);

6. Schéma relationnel

ordre(id, nom, classe)

toxicite(id_tox, type, effets)

champignon(id, nom, #id_ordre, lamelle, couleur, chapeau_min, chapeau_max, pied_min, pied_max, #id_toxicite)

7. Toxicité de l’amanite citrine

UPDATE champignon
SET id_toxicite = 1
WHERE nom = 'amanite citrine';

8. Amanitales très toxiques

SELECT champignon.nom
FROM champignon
JOIN ordre ON champignon.id_ordre = ordre.id
JOIN toxicite ON champignon.id_toxicite = toxicite.id_tox
WHERE ordre.nom = 'amanitales' AND toxicite.type = 'très toxique';

Partie B – Programmation Python

9. Champignons de la saison été

for e in liste_champi:
    if e.saison == 'été':
        print(e.nom)

10. Pourquoi le programme renvoie False ?

L’attribut cuisson du lactaire délicieux vaut '12 minutes à feu moyen'. Le test == compare la chaîne entière : '12 minutes à feu moyen' == 'feu moyen' est faux, alors que l’information « feu moyen » est bien présente.

11. Programme corrigé

for c in liste_champi:
    if c.nom == 'Lactaire délicieux':
        return recherche_textuelle(c.cuisson, 'moyen')

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

💻 Console Python (cliquer pour afficher)

🔎 Exercices sur des thèmes similaires