Exercice 2 Polynésie – Bac NSI 2025 – Jour 2
mots clés: programmation, POO, BDD, SQL
🔎 Voir les exercices similaires ↓
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 | ||||||||
|---|---|---|---|---|---|---|---|---|
| id | nom | id_ordre | lamelle | couleur | chapeau_min | chapeau_max | pied_min | pied_max |
| 1 | champignon de Paris | 1 | oui | blanc | 4 | 10 | 2 | 5 |
| 2 | champignon noir | 2 | non | noir | 2 | 10 | 0 | 0 |
| 3 | coprin chevelu | 1 | oui | blanc | 5 | 20 | 10 | 40 |
| 4 | bolet à pied rouge | 3 | non | jaune | 7 | 19 | 5 | 15 |
| 5 | amanite des Césars | 4 | oui | orange | 8 | 20 | 8 | 15 |
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.
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.
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 | ||
|---|---|---|
| id | nom | classe |
| 1 | agaricales | agaricomycètes |
| 2 | trémellales | phragmabasidiomycètes |
| 3 | bolétales | agaricomycètes |
| 4 | amanitales | agaricomycètes |
| 5 | cantharellales | agaricomycètes |
| 6 | polyporales | basidiomycètes |
| 7 | clavariales | homobasidiomycètes |
| 8 | tricholomatales | agaricomycètes |
Donner la clé étrangère de la table champignon faisant référence à la clé primaire id de la table ordre.
É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.
É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_tox | type | effets |
| 1 | très toxique | Entrainant la mort |
| 2 | toxique | Entrainant des problèmes digestifs ou nerveux |
| 3 | à rejeter | Champignons suspects ou ayant un mauvais goût |
| 4 | comestible | Champignons pouvant être consommés |
É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.
Écrire la requête permettant de corriger cette erreur dans la table champignon.
É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.
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.
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
Corriger le programme de la question précédente en utilisant la fonction recherche_textuelle.
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
🔎 Exercices sur des thèmes similaires
-
Asie 2024 – jour 1 – exercice 3
programmation, POO, BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥 -
Centres étrangers 2024 – jour 1 – exercice 3
programmation, POO, BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥 -
Asie 2025 – jour 2 – exercice 3
POO, BDD, SQL, arbres binaires — Difficulté : 🔥🔥🔥🔥🔥 -
Métropole 2025 – jour 2 – exercice 2
BDD, SQL, programmation — Difficulté : 🔥🔥🔥🔥🔥 -
Nouvelle Calédonie 2025 – jour 1 – exercice 2
BDD, SQL , POO — Difficulté : 🔥🔥🔥🔥🔥 -
Asie 2024 – jour 2 – exercice 3
BDD, SQL, programmation — Difficulté : 🔥🔥🔥🔥🔥