Accroche et situation-problème
« Un centre sportif calcule le tarif d'un accès journalier (tarif de base : 20 DT). Le client fournit son âge et un code de formule sous forme d'un caractère : 'P' (Piscine : +5 DT), 'M' (Musculation : +10 DT) ou 'T' (Total : +15 DT). Tout autre code entraîne un message d'erreur. De plus, une remise est accordée selon l'âge : gratuit pour les moins de 12 ans, 50% de réduction pour les juniors (12 à 17 ans inclus) et 20% pour les seniors (60 ans et plus). Calculer et afficher le prix net à payer. »
1. Formules & Suppléments (Choix multiple) :
-
'P' ou 'p' Piscine+5 DT
-
'M' ou 'm' Musculation+10 DT
-
'T' ou 't' Accès Total+15 DT
-
Autre code Code non reconnuErreur
2. Remises par Tranche d'Âge (Conditions continues) :
-
< 12 ans EnfantsGratuit (100% remise)
-
12 à 17 ans Juniors-50% (prix × 0.5)
-
≥ 60 ans Seniors-20% (prix × 0.8)
-
18 à 59 ans AdultesTarif plein (100%)
Si ... Sinon Si ... Sinon).
Questionnement oral (cliquez pour afficher la réponse didactique) :
Tableau de correspondance : Algorithmique ↔ Python
Mise au point sur les équivalences normatives officielles pour les structures conditionnelles et les opérateurs (Conventions 2024-2025) :
| Structure / Opération | Algorithmique (Norme) | Python (Conventions 2024-2025) |
|---|---|---|
| Forme simple | Si Condition Alors |
if Condition : |
| Forme alternative | Si Condition Alors |
if Condition : |
| Forme généralisée | Si C1 Alors ... |
if C1 : ... |
| Choix multiple | Selon Sélecteur |
match Sélecteur : |
| Opérateurs logiques | Non, Et, Ou |
not, and, or |
| Opérateurs de comparaison | =, ≠, <, ≤, >, ≥, ∈ |
==, !=, <, ≤, >, ≥, in |
Rappels didactiques et normatifs majeurs :
- Type scalaire obligatoire pour le
Selon: Le sélecteur de la structureSelondoit être impérativement de type Entier ou Caractère. - Clause par défaut en Python : Dans le bloc
match-case, le tiret de soulignementcase _ :représente la clause par défaut équivalente auSinonduSelon. - Indentation syntaxique obligatoire : En Python, l'indentation (4 espaces) remplace impérativement les délimiteurs textuels (
FinSi,Fin Selon).
En algorithmique, l'égalité se note = (l'affectation étant ←). En Python, le test d'égalité s'écrit obligatoirement ==.
valide = (age == 18)
Pour grouper plusieurs valeurs dans un case en Python, on emploie le symbole pipe | et jamais la virgule.
case "P" | "p":
# INTERDIT : case "P", "p":
En algorithmique, l'encadrement nécessite Et. En Python, la double comparaison chaînée est directement acceptée.
12 <= age <= 17
Conception algorithmique & T.D.O. Standard
Construction guidée de la solution au tableau : articulation rigoureuse entre la structure à choix multiple et les conditions généralisées.
ALGORITHME TarifAcces
DEBUT
Écrire("Donner l'âge du client : ")
Lire(age)
Écrire("Donner le code de formule (P, M ou T) : ")
Lire(formule)
supplement ← 0
valide ← Vrai
Selon formule
"P", "p" : supplement ← 5
"M", "m" : supplement ← 10
"T", "t" : supplement ← 15
Sinon
valide ← Faux
Fin Selon
Si Non valide Alors
Écrire("Formule invalide !")
Sinon
prix_brut ← 20 + supplement
Si age < 12 Alors
prix_net ← 0
Sinon Si (age ≥ 12) Et (age ≤ 17) Alors
prix_net ← prix_brut * 0.5
Sinon Si age ≥ 60 Alors
prix_net ← prix_brut * 0.8
Sinon
prix_net ← prix_brut
FinSi
Écrire("Montant net à payer : ", prix_net, " DT")
FinSi
FIN
| Objet | Type / Nature |
|---|---|
| age, supplement | Entier |
| prix_brut, prix_net | Réel |
| formule | Caractère |
| valide | Booléen |
formule: Variable de type Caractère servant de sélecteur scalaire auSelon.valide: Drapeau booléen (flag) pour stopper proprement l'évaluation en cas d'erreur de saisie.prix_net: Déclaré comme Réel pour accueillir les valeurs après calcul des réductions en pourcentage.
Traduction, Exécution sur machine & Laboratoire
Saisie individuelle du script Python par les élèves en appliquant rigoureusement les conventions officielles (Python 3.10+) :
# Entrées
age = int(input("Donner l'âge du client : "))
formule = input("Donner le code de formule (P, M ou T) : ")
# Structure à choix multiples (match / case)
supplement = 0
valide = True
match formule:
case "P" | "p":
supplement = 5
case "M" | "m":
supplement = 10
case "T" | "t":
supplement = 15
case _:
valide = False
# Traitement conditionnel imbriqué et généralisé
if not valide:
print("Formule invalide !")
else:
prix_brut = 20 + supplement
if age < 12:
prix_net = 0.0
elif 12 <= age <= 17:
prix_net = prix_brut * 0.5
elif age >= 60:
prix_net = prix_brut * 0.8
else:
prix_net = float(prix_brut)
print("Montant net à payer :", prix_net, "DT")
| dans case :Vérifier l'utilisation impérative de la barre verticale
case "P" | "p": pour l'alternative. La virgule , est une faute de syntaxe dans ce contexte.
Veiller à ce que l'opérateur de comparaison
== ne soit jamais confondu avec l'affectation = dans les expressions booléennes.
Contrôler l'alignement des sous-blocs : le bloc intérieur au
match, puis l'imbrication du if-elif-else à l'intérieur du else principal.
Détail du calcul pas-à-pas :
valide) :
{{ isFormuleValid ? 'Vrai / True' : 'Faux / False (Invalide)' }}