đ Expressions boolĂ©ennes
- Expressions booléennes
- if
- elif
- else
- ifelifelse
- Forme compacte
- match/case
- Exceptions
- Validation
- Exercices
Une expression booléenne est une expression qui évalue à une valeur de vérité (bool
), c'est-Ă -dire soit True
(vrai) soit False
(faux).
Elles sont utilisées pour prendre des décisions dans le code, comme dans les instructions conditionnelles (if
, elif
, else
) et les boucles (while
, for
).
Les opérateurs de comparaison sont utilisés pour comparer deux valeurs.
Voici les principaux opérateurs de comparaison en Python :
Opérateur | Description | Exemple | Résultat |
---|---|---|---|
== | Ăgal Ă | a == b | True si a est Ă©gal Ă b , sinon False |
!= | Différent de | a != b | True si a est différent de b , sinon False |
< | Inférieur à | a < b | True si a est inférieur à b , sinon False |
<= | Inférieur ou égal à | a <= b | True si a est inférieur ou égal à b , sinon False |
> | Supérieur à | a > b | True si a est supérieur à b , sinon False |
>= | Supérieur ou égal à | a >= b | True si a est supérieur ou égal à b , sinon False |
a = 5
b = 10
print(a < b) # Affiche True
print(a == b) # Affiche False
print(a + 5 >= b - max(1, min(4, a, 6), 5)) # Affiche False, explications ci-dessous!
Les 2 opĂ©randes dâun opĂ©rateur de comparaison peuvent ĂȘtre le rĂ©sultat de l'Ă©valuation dâexpressions.
Python Ă©value lâexpression selon la prioritĂ© des opĂ©rateurs, en remplaçant chaque sous-expression par sa valeur rĂ©sultante.
Voici comment Python Ă©value lâinstruction #5, Ă©tape par Ă©tape :
print(a + 5 >= b - max(1, min(4, a, 6), 5)) # Instruction originale
print(5 + 5 >= b - max(1, min(4, 5, 6), 5)) # Remplace 'a' par sa valeur
print(10 >= b - max(1, min(4, 5, 6), 5)) # Calcule la somme de '5 + 5'
print(10 >= 10 - max(1, min(4, 5, 6), 5)) # Remplace 'b' par sa valeur
print(10 >= 10 - max(1, 4, 5)) # La fonction min(...) doit ĂȘtre rĂ©solue avant la fonction max(...)
print(10 >= 10 - 5) # La fonction max(...) est résolue
print(10 >= 5) # L'opération >=
print(True) # Affiche "True" dans la console
Les opérateurs logiques sont utilisés pour combiner plusieurs expressions booléennes.
Voici les principaux opérateurs logiques en Python :
Opérateur | Description | Exemple | Résultat |
---|---|---|---|
and | ET logique | a and b | True si a et b sont tous deux True , sinon False |
or | OU logique | a or b | True si au moins un de a ou b est True , sinon False |
not | NON logique | not a | True si a est False , sinon False |
La priorit é des opérateurs détermine l'ordre dans lequel les opérations sont effectuées dans une expression.
En Python, la priorité des opérateurs est la suivante (de la plus haute à la plus basse) :
- ParenthĂšses
()
- Opérateurs de comparaison (
==
,!=
,<
,<=
,>
,>=
) - Opérateur
not
- Opérateur
and
- Opérateur
or
Un ordre plus exhaustif des priorités des opérateurs est disponible ici dans l'aide-mémoire.
a = 5
b = 10
c = 15
print(a < b and b < c) # ĂvaluĂ© comme (a < b) and (b < c), affiche True
print(a < b or b > c) # ĂvaluĂ© comme (a < b) or (b > c), affiche True
print(not a < b) # ĂvaluĂ© comme not (a < b), affiche False
# On peut utiliser des parenthÚses pour modifier l'ordre d'évaluation :
print(a < b or b > c and a == 5) # ĂvaluĂ© comme a < b or (b > c and a == 5), affiche True
print((a < b or b > c) and a == 5) # ĂvaluĂ© comme (a < b or b > c) and a == 5, affiche True
On peut stocker le résultat d'une expression booléenne dans une variable pour une utilisation ultérieure.
a = 5
b = 10
est_plus_petit = a < b # est_plus_petit sera True
est_egal = a == b # est_egal sera False
print(est_plus_petit) # Affiche True
print(est_egal) # Affiche False
Voici quelques autres opérateurs d'expression booléenne utiles en Python :
Opérateur | Description | Exemple | Résultat |
---|---|---|---|
in | Appartenance (contenu dans) | "a" in "chat" | True |
not in | Non-appartenance (pas dans) | "b" not in "chat" | True |
mot = "chat"
print("a" in mot) # Affiche True
print("b" not in mot) # Affiche True
C'est bien beau, ça, les expressions booléennes, mais à quoi ça sert?
đ Elles servent principalement Ă contrĂŽler le flux d'exĂ©cution du programme,
c'est-Ă -dire Ă dĂ©cider quelles parties du code doivent ĂȘtre exĂ©cutĂ©es en fonction de certaines conditions.
Voici un exemple simple d'instruction conditionnelle en Python :
age = 18
if age >= 18 :
print("Vous ĂȘtes majeur.")
Dans cet exemple, l'instruction if
vérifie si la variable age
est supérieure ou égale à 18.
Si c'est le cas (si la condition est True
), le code indenté sous l'instruction if
est exĂ©cutĂ©, affichant "Vous ĂȘtes majeur.".
Si la condition est False
, le code indenté n'est pas exécuté.
En Python, l'indentation (les espaces ou tabulations avant une ligne de code) est cruciale pour définir les blocs de code.
Le code qui doit ĂȘtre exĂ©cutĂ© conditionnellement doit ĂȘtre indentĂ© sous l'instruction if
.
Par exemple :
if condition :
# Code indenté, exécuté si la condition est True
faire_quelque_chose_conditionnel()
faire_autre_chose_conditionnel()
# Code non indenté, exécuté indépendamment de la condition
faire_autre_chose_en_tout_temps()
Exemple d'erreur courante due Ă une mauvaise indentation :
if condition :
faire_quelque_chose() # Erreur : cette ligne doit ĂȘtre indentĂ©e
Exemple concret :
age = 20
if age >= 18 :
print("Vous ĂȘtes majeur.")
print("Vous avez le droit de vote!")
print("Un grand pouvoir implique de grandes responsabilités.")
print("Bienvenue!") # Toujours exécuté, indépendamment de l'ùge
Non!
elif
est la contraction de "else if", qui signifie "sinon si".
Elle permet de vérifier une autre condition si la premiÚre condition dans l'instruction if
est False
.
Par exemple :
age = 16
if age >= 18 :
print("Vous ĂȘtes majeur.")
elif age >= 13 :
print("Vous ĂȘtes adolescent.")
On peut avoir plusieurs clauses elif
pour vérifier plusieurs conditions différentes.
Par exemple :
age = 10
if age >= 18 :
print("Vous ĂȘtes majeur.")
elif age >= 13 :
print("Vous ĂȘtes adolescent.")
elif age >= 3 :
print("Vous ĂȘtes un enfant.")
L'ordre des conditions est important.
Les conditions sont évaluées de haut en bas, et la premiÚre condition qui est True
déclenche l'exécution du bloc de code correspondant.
Par exemple, dans le code suivant, la condition age >= 13
sera toujours True
pour tous les adultes, et la condition age >= 18
ne sera jamais atteinte :
age = 21
if age >= 13 :
print("Vous ĂȘtes adolescent.")
elif age >= 18 :
print("Vous ĂȘtes majeur.")
Pour éviter cela, il faut toujours commencer par la condition la plus restrictive (la plus élevée) et descendre vers les conditions moins restrictives :
age = 21
if age >= 18 :
print("Vous ĂȘtes majeur.")
elif age >= 13 :
print("Vous ĂȘtes adolescent.")
elif
sans if
Une clause elif
doit toujours ĂȘtre prĂ©cĂ©dĂ©e d'une instruction if
.
Par exemple, le code suivant est incorrect et provoquera une erreur de syntaxe :
age = 16
elif age >= 13 : # Erreur : 'elif' sans 'if'
print("Vous ĂȘtes adolescent.")
else
signifie "sinon".
Elle permet de définir un bloc de code qui sera exécuté si toutes les conditions précédentes (if
et elif
) sont False
.
Par exemple :
age = 10
if age >= 18 :
print("Vous ĂȘtes majeur.")
elif age >= 13 :
print("Vous ĂȘtes adolescent.")
else :
print("Vous ĂȘtes un enfant.")
Dans cet exemple, si age
est infĂ©rieur Ă 13, le message "Vous ĂȘtes un enfant." sera affichĂ©.
La clause else
est souvent utilisée à la fin d'une série d'instructions if
et elif
pour capturer tous les cas non couverts par les conditions précédentes.
Par exemple :
score = 85
if score >= 90 :
print("Excellent")
elif score >= 75 :
print("Bien")
elif score >= 50 :
print("Passable")
else :
print("Ăchec")
Contrairement Ă if
et elif
, la clause else
ne prend pas de condition.
Elle est simplement exécutée si toutes les conditions précédentes sont False
. Par exemple, le code suivant est incorrect et provoquera une erreur de syntaxe :
score = 85
if score >= 90 :
print("Excellent")
elif score >= 75 :
print("Bien")
elif score >= 50 :
print("Passable")
else score < 50 : # Erreur : 'else' ne doit pas avoir de condition
print("Ăchec")
Il est possible d'utiliser else
directement aprĂšs un if
, sans avoir besoin de elif
.
Par exemple :
age = 20
if age >= 18 :
print("Vous ĂȘtes majeur.")
else :
print("Vous ĂȘtes mineur.")
Les structures conditionnelles (if/elif/else
, match/case
) peuvent ĂȘtre utilisĂ©es Ă l'intĂ©rieur de fonctions.
Par exemple :
def est_pair(n):
if n % 2 == 0:
return True # Faire modulo 2 sur un nombre pair donne toujours 0!
else:
return False
a = 33
b = 52
print(f"{a} est un nombre pair : {est_pair(a)}")
print(f"{b} est un nombre pair : {est_pair(b)}")
Cet exemple permet de calculer la paie brute d'un employé :
def calculer_paie_brute(nb_heures, taux_horaire, temps_double_apres_40_heures=False):
salaire = nb_heures * taux_horaire
if temps_double_apres_40_heures and nb_heures >= 40:
nb_heures_temps_supp = nb_heures - 40
salaire = salaire + nb_heures_temps_supp * taux_horaire * 2
return salaire
nb_heures = 45
taux_horaire = 20
print(f"Calcul de la paie brute pour {nb_heures} heures Ă un taux horaire de {taux_horaire}$/h.")
print(f" Avec le temps > 40 payé au taux doublé : {calculer_paie_brute(nb_heures, taux_horaire, True)}$")
print(f" Avec le temps > 40 payé au taux régulier : {calculer_paie_brute(nb_heures, taux_horaire)}$")
Pour récapituler, la structure d'une instruction conditionnelle en Python est la suivante :
if
: Obligatoire pour commencer une instruction conditionnelle.elif
: Optionnels, il peut y en avoir 0, 1, 2, ou plus.
Chaqueelif
vérifie une condition, seulement si toutes les conditions précédentes sontFalse
.else
: Optionnel, il n'y a qu'un seulelse
possible.
Il est exécuté si toutes les conditions précédentes sontFalse
.
Ne prend pas de condition.
- Indentation : le code Ă exĂ©cuter conditionnellement doit ĂȘtre indentĂ© sous l'instruction correspondante.
- Ordre des conditions : les conditions sont évaluées de haut en bas, la premiÚre condition
True
déclenche l'exécution du bloc de code correspondant, et les autres sont ignorées.
Pour les instructions conditionnelles simples, on peut utiliser une forme compacte en une seule ligne.
Par exemple :
age = 20
print("Vous ĂȘtes majeur.") if age >= 18 else print("Vous ĂȘtes mineur.")
On peut aussi utiliser cette forme compacte pour stocker le résultat dans une variable :
age = 20
statut = "majeur" if age >= 18 else "mineur"
print(statut) # Affiche "majeur"
La forme compacte est utile pour des conditions simples et des actions courtes.
Cependant, pour des conditions plus complexes ou des blocs de code plus longs,
il est préférable d'utiliser la forme standard avec indentation pour une meilleure lisibilité.
On peut aussi utiliser des elif
dans une forme compacte, mais cela peut rapidement devenir difficile Ă lire.
Par exemple :
score = 85
resultat = "Excellent" if score >= 90 else "Bien" if score >= 75 else "Passable" if score >= 50 else "Ăchec"
print(resultat) # Affiche "Bien"
Si on a besoin de elif
, il est préférable d'utiliser la forme standard pour une meilleure lisibilité.
Le match/case
est une structure de contrĂŽle qui permet de faire des correspondances de motifs (pattern matching).
- Il permet de comparer une variable Ă plusieurs valeurs possibles.
- Il offre ainsi une alternative aux longues chaĂźnes d'instructions
if
/elif
/else
pour des cas spécifiques.
Sa syntaxe est la suivante :
match variable:
case valeur1:
# code à exécuter si variable == valeur1
case valeur2:
# code à exécuter si variable == valeur2
case _:
# code à exécuter si aucune des valeurs précédentes ne correspond
- Le
_
dans le derniercase
agit comme unelse
, capturant tous les autres cas non spĂ©cifiĂ©s. - Utile pour des comparaisons simples, mais peut ĂȘtre moins flexible que
if
/elif
/else
pour des conditions complexes. - Exemple :
jour = "lundi"
match jour:
case "lundi":
print("Début de la semaine")
case "mercredi":
print("Milieu de la semaine")
case "vendredi":
print("Fin de la semaine")
case _:
print("Jour ordinaire")
- Plus lisible pour des comparaisons multiples sur une mĂȘme variable.
- Permet de gérer facilement des cas spécifiques.
- Peut ĂȘtre plus performant que de nombreuses instructions
if
/elif
dans certains cas.
đ Il est important de noter que tout match/case
peut ĂȘtre réécrit avec des if
/elif
/else
, mais l'inverse n'est pas toujours vrai.
Quand un programme rencontre une erreur (division par zéro, fichier manquant, format invalide),
Python interrompt son exĂ©cution avec un message dâerreur. Ces erreurs sont appelĂ©es exceptions.
Avec try
et except
, on peut contrĂŽler ce qui se passe en cas dâerreur, au lieu de laisser le programme planter.
Copiez et exécutez ce code :
numerateur = 10
denominateur = 0
resultat = numerateur / denominateur
Notez lâerreur affichĂ©e par Python.
Maintenant, modifiez le code pour gĂ©rer lâerreur, et exĂ©cutez-le en mode dĂ©bogage, ligne par ligne, afin de bien comprendre le flux dâexĂ©cution :
numerateur = 10
denominateur = 0
try :
resultat = numerateur / denominateur
print("Résultat:", resultat)
except ZeroDivisionError :
print("Erreur : division par zéro interdite.")
GrĂące au try/except
, on affiche plutĂŽt un message clair Ă lâutilisateur et le programme continue.
try/except
et raise
try/except
= rattraper une erreur qui se produit (mettre un filet de sécurité).raise
= provoquer volontairement une erreur si une condition nâest pas respectĂ©e (mettre une barriĂšre).
raise
)On peut aussi créer nos propres erreurs quand les conditions ne sont pas respectées.
def concentration(masse_g, volume_L):
if volume_L == 0 :
raise ZeroDivisionError("Le volume ne peut pas ĂȘtre 0.")
if masse_g < 0 :
raise ValueError("La masse doit ĂȘtre positive.")
return masse_g / volume_L
Dans ce cas, lâerreur est volontaire : on empĂȘche lâutilisation de valeurs impossibles en science.
try/except
)Si on souhaite intercepter l'erreur avec le message d'erreur personnalisé, on doit utiliser un bloc try/except
comme ceci :
try:
# Début du code à risque
concentration(4,20) # OKI, éxécuté sans problÚme
concentration(-10,20) # PAS OKI, masse négative!
concentration(4,20) # JAMAIS éxécuté à cause de l'exception
# Fin du code Ă risque
except (ZeroDivisionError, ValueError) as e:
# Interception de l'erreur
print(f"Une erreur est subvenue : {e}")
La variable e
contient ici l'exception interceptée, l'afficher à la console va afficher le message d'erreur personnalisé.
- Nâattrapez que les erreurs prĂ©vues (sinon on cache de vrais bogues).
- Donnez toujours un message utile qui aide Ă corriger.
- Utilisez
raise
pour signaler un problĂšme clair Ă lâutilisateur qui utilise votre fonction.
Dans ce cours, nous allons nous limiter à utiliser les exceptions déjà existantes les plus communes :
- ZeroDivisionError : une division par zéro.
- TypeError : le type de la donnée transmise à la fonction n'est pas du type attendu.
- ValueError : la valeur transmise à la fonction n'est pas cohérente avec ce qui est attendu.
Il est aussi possible de crĂ©er ses propres types dâerreurs en dĂ©finissant une classe qui hĂ©rite de Exception
.
Comme mentionné précédemment, nous allons nous limiter aux exceptions déjà existantes, mais sachez que cette possibilité existe.
Câest utile dans de grands projets pour distinguer vos erreurs spĂ©cifiques de celles de Python.
Exemple minimal :
class DonneesInvalidesError(Exception): pass # Définir un nouveau type d'erreur
raise DonneesInvalidesError("Les données fournies ne sont pas valides.")
Quand on Ă©crit une fonction, il faut sâassurer que les entrĂ©es (paramĂštres) ont du sens.
Sinon, on risque dâobtenir des rĂ©sultats absurdes ou des erreurs difficiles Ă comprendre.
En science, valider les paramĂštres est essentiel pour pouvoir faire confiance aux calculs.
Exemple : vĂ©rifier quâune masse est positive, quâun volume nâest pas nul, etc.
- Validation = vérifier les entrées avant de calculer.
- Exceptions = signaler clairement un problÚme si les conditions ne sont pas respectées.
đ La validation utilise souvent raise
pour bloquer une fonction quand un paramĂštre est invalide.
Version 1 â sans validation
def densite(masse, volume):
return masse / volume
print(densite(10, 2)) # 5.0
print(densite(8, 0)) # Erreur Python (division par zéro)
Ici, la fonction ne réalise pas de validation, alors le programme plante si on entre un volume nul ou une masse invalide, avec des messages d'erreur génériques.
Version 2 â avec validation
def densite(masse, volume):
if masse < 0:
raise ValueError("La masse doit ĂȘtre positive.")
if volume <= 0:
raise ZeroDivisionError("Le volume doit ĂȘtre supĂ©rieur Ă 0.")
return masse / volume
print(densite(10, 2)) # 5.0
print(densite(-3, 5)) # ValueError
print(densite(8, 0)) # ZeroDivisionError
Ici, la fonction effectue des validations et lÚve des exceptions accompagnées de messages d'erreur clair et précis, selon la situation problématique détectée.
- Les erreurs deviennent explicites (ex.: âvolume doit ĂȘtre > 0â).
- On évite les résultats absurdes.
- Le code est plus robuste et réutilisable.
- â
Types corrects (
int
,float
) - â Domaines respectĂ©s (positif, non nul)
- â Cas limites couverts (valeur nĂ©gative, zĂ©ro, etc.)
Voici un exemple complet d'une fonction qui calcule la concentration d'une solution, avec validation des paramĂštres et gestion des exceptions :
def calculer_concentration(masse_g, volume_L):
if not isinstance(masse_g, (int, float)):
raise TypeError("La masse doit ĂȘtre un nombre (int ou float).")
if not isinstance(volume_L, (int, float)):
raise TypeError("Le volume doit ĂȘtre un nombre (int ou float).")
if masse_g < 0:
raise ValueError("La masse doit ĂȘtre positive.")
if volume_L <= 0:
raise ValueError("Le volume doit ĂȘtre supĂ©rieur Ă 0.")
return masse_g / volume_L
# Exemples d'utilisation
try:
print(calculer_concentration(10, 2)) # 5.0
print(calculer_concentration(-5, 2)) # ValueError
print(calculer_concentration(10, 0)) # ValueError
print(calculer_concentration(10, "a")) # TypeError
except (TypeError, ValueError) as e:
print(f"Erreur : {e}")
La fonction isinstance(valeur, type)
permet de vérifier si une certaine valeur est bien d'un certain type.
Par exemple isinstance(5, int)
retourne True
alors que isinstance("5", int)
retourne False
.
Dans l'exemple, il est vérifié si les paramÚtres sont de type int
ou float
.
âïž Exercices de comprĂ©hensionâ
Pour faire les traces des exercices suivants, regardez d'abord ces recettes de traces :
if
/else
+ forme compacteSans exécuter le code, qu'affichera le programme ci-dessous?
En suivant cette recette de trace, faites la trace de l'exécution.
En situation d'examen, ce type de question serait Ă faire sans l'ordinateur.
def carre(x):
return x * x
def calcul(n):
if n % 2 == 0:
return n + 5
else:
return carre(x) - 1
x = 3
x = calcul(x)
if x >= 5:
calcul(x)
print("Hello World") if x == 13 else print("Fin")
Validez votre trace en exécutant le code dans un script en mode débogage.
if
/elif
/else
+ forme compacteSans exécuter le code, qu'affichera le programme ci-dessous?
En suivant cette recette de trace, faites la trace de l'exécution.
En situation d'examen, ce type de question serait Ă faire sans l'ordinateur.
def mystere(n):
print("---")
if n % 2 == 0:
print("!")
elif n >= 10:
print("E")
if n // 10 == 5:
print("X")
else:
print("D")
print("P.")
elif n >= 20:
print("F")
else:
print("3") if n < 5 else print("33")
mystere(55)
mystere(5)
mystere(12)
Validez votre trace en exécutant le code dans un script en mode débogage.
and
et or
Sans exécuter le code, qu'affichera le programme ci-dessous?
En suivant cette recette de trace, faites la trace de l'exécution.
En situation d'examen, ce type de question serait Ă faire sans l'ordinateur.
def mystere(x, y, z):
print(f"--- x:{x}, y:{y}, z:{z}")
if (x >= 5 or y < 15) or z >= 10 :
print("Condition 1")
if (x >= 5 and y < 15) or z >= 10 :
print("Condition 2")
if (x >= 5 and y < 15) and z >= 10 :
print("Condition 3")
mystere(0, 5, 5)
mystere(5, 5, 5)
mystere(5, 10, 10)
Validez votre trace en exécutant le code dans un script en mode débogage.
Sans exécuter le code, qu'affichera le programme ci-dessous?
En suivant cette recette de trace, faites la trace de l'exécution.
En situation d'examen, ce type de question serait Ă faire sans l'ordinateur.
def calcul(a, b):
print(f"a : {a} b : {b}")
if a ** 2 > 20:
raise ValueError("Valeur interdite")
return a * b
print("World")
try:
calcul(2, 3)
calcul(5, 3)
calcul(8, 3)
except ValueError as e:
print(f"Erreur : {e}")
print("Hello")
Validez votre trace en exécutant le code dans un script en mode débogage.
đš Exercices de crĂ©ationâ
Définissez une fonction décrivant le niveau d'acidité d'une solution à partir de son pH.
La fonction doit recevoir en entrée le pH et renvoyer en sortie soit : "acide", "neutre" ou "basique".
Validez le bon fonctionnement en testant les différents cas possibles à l'aide d'appels :
print(f"Une solution avec un Ph de 5 est : {nom_de_votre_fonction(5)}")
print(f"Une solution avec un Ph de 7 est : {nom_de_votre_fonction(7)}")
print(f"Une solution avec un Ph de 10 est : {nom_de_votre_fonction(10)}")
Ăcrivez une fonction densite(masse, volume)
qui retourne la densité en g/mL.
- Validez que la masse est positive.
- Validez que le volume est strictement positif (non nul).
- Levez une exception claire (
ValueError
ouZeroDivisionError
) si les conditions ne sont pas respectées.
Testez votre fonction en l'appelant avec des valeurs valides et invalides pour vérifier que la validation fonctionne correctement.
Pourquoi est-il prĂ©fĂ©rable dâarrĂȘter lâexĂ©cution avec un message clair plutĂŽt que de laisser Python planter avec une erreur brute?
Une Ă©quation quadratique, aussi appelĂ©e Ă©quation du second degrĂ©, est une Ă©quation polynomiale de la forme , oĂč , , et sont des constantes et est diffĂ©rente de zĂ©ro.
Le discriminant est crucial pour déterminer le nombre de solutions d'une équation quadratique :
đ Nous allons nous concentrer uniquement sur les solutions rĂ©elles dans cet exercice.
La formule pour trouver les zéros est :
Ăcrivez un programme permettant d'afficher les solutions d'une Ă©quation quadratique.
Votre programme doit demander Ă l'utilisateur une valeur pour a
, b
et c
et ensuite il doit afficher les solutions.
Faite des variables globales pour stocker les valeurs de a
, b
et c
. Ne créez pas de fonction pour ce numéro.
â EXEMPLE DE SORTIE ATTENDUE POUR LES 3 CAS POSSIBLES
Si aucune solution (ex : a = 1, b = 2, c = 5)
Il n'y a pas de solution réelle pour ces valeurs de a, b et c.
Si une seule solution (ex. a = 1, b = 6, c = 9)
Il y a une seule solution (racine double) : -3
Si 2 solutions possibles pour ce problĂšme (ex. a = 1, b = 5, c = 6)
Il y a 2 solutions possibles : -2 et -3
Pour cet exercice, vous devez remplacer les if/elif/else
du code ci-dessous par un match/case
.
def type_animal(deplacement):
if deplacement == "vole":
return "oiseau"
elif deplacement == "nage":
return "poisson"
elif deplacement == "marche":
return "mammifĂšre"
elif deplacement == "rampe":
return "reptile"
else:
return "inconnu"
deplacement = "vole"
print(f"Si je {deplacement}, je suis un {type_animal(deplacement)}.")
Améliorez le code réalisé lors de la rencontre 2 servant à calculer la note finale du cours.
-
Créez une fonction :
- qui prend en paramÚtres les 4 nombres représentant les notes,
- et qui retourne la note finale calculée.
-
Appelez cette fonction pour réaliser le calcul avec les notes saisies.
-
Modifiez le calcul de la note finale afin de prendre en compte la double sanction.
Les gĂšnes Myc et p21 rĂ©gulent le cycle cellulaire de maniĂšre opposĂ©e : Myc stimule la prolifĂ©ration cellulaire en activant des gĂšnes liĂ©s Ă la croissance, tandis que p21 freine cette progression en bloquant les enzymes responsables de la division. On les Ă©tudie en science parce quâils jouent un rĂŽle clĂ© dans le dĂ©veloppement du cancer, Myc par sa capacitĂ© Ă favoriser les tumeurs, et p21 par son potentiel Ă les empĂȘcher. Ces 2 gĂšnes exercent souvent des effets opposĂ©s dans les cellules souches.
Les deux courbes se croisent entre 12h et 24h, câest le point dâĂ©quilibre!
Ce moment marque une transition biologique importante : la cellule quitte son état prolifératif pour entrer en phase de différenciation.
đ Ătape A - RecrĂ©ez le graphique, Ă vous de jouer!â
Utilisez Python pour gĂ©nĂ©rer le graphique, et rien dâautre! MĂȘme si la bibliothĂšque Matplotlib nâa pas encore Ă©tĂ© abordĂ©e, vous disposez dâun exemple suffisamment clair pour vous guider. Il ne vous reste quâĂ lâadapter Ă notre contexte. Pour le moment pas besoin de ChatGPT đ€, vous avez dĂ©jĂ tout ce qu âil faut pour rĂ©ussir cette Ă©tape!
Voici les données nécessaires pour réaliser cette tùche :
'''
Les valeurs stockées dans ces variables sont des listes,
structure de donnéees que nous verrons plus tard dans le cours.
Pour l'instant, contentez-vous de copier-coller ces lignes dans votre script.
'''
temps = [0, 6, 12, 18, 24, 30, 36] # Valeurs en X pour les 2 gĂšnes
exp_gene_myc = [95, 80, 60, 45, 30, 15, 5] # Valeurs en Y pour le gĂšne Myc
exp_gene_p21 = [5, 20, 40, 55, 70, 85, 95] # Valeurs en Y pour le gĂšne p21
đ€ Ătape B - ExpĂ©rimentez avec l'aide de ChatGPT!â
đĄ Instructions pour cette sectionâ
Commencez par interroger ChatGPT afin de bien comprendre le rÎle de chaque ligne de code présentée.
Une fois que vous ĂȘtes certain de leur fonctionnement, intĂ©grez-les progressivement dans votre propre script.
Voici le résultat souhaité :
âïž ProcĂ©dez Ă©tape par Ă©tapeâ
Ajoutez et relancez le programme Ă chaque changement afin de bien voir les changements.
# Mettre immédiatement aprÚs la création des tableaux de données
plt.figure(figsize=(10, 6))
# Mettre n'importe oĂč avant l'instruction plt.show()
plt.tight_layout()
# Mettre n'importe oĂč avant l'instruction plt.show()
plt.grid(True)
# Mettre n'importe oĂč avant l'instruction plt.show()
plt.axvline(x=16, color='gray', linestyle='--', label='Point d\'équilibre')
# Mettre n'importe oĂč avant l'instruction plt.show()
plt.text(17, 48, 'âïž Ăquilibre', fontsize=12, color='gray')
# Remplacer plt.show() par cette instruction, lancer le programme, puis ouvrir le fichier ".png" généré
plt.savefig('image_du_graphique.png')
đŻ Solutions des exercices
Un solutionnaire possible pour chaque exercice est disponible en format vidĂ©o avec des explications. Vous pouvez vous en servir pour comparer votre solution avec une solution possible jugĂ©e optimale et vous dĂ©bloquer aprĂšs un long moment bloquĂ© sur un exercice (ex. 20 minutes) et aprĂšs avoir utilisĂ© le dĂ©gogueur pour essayer par vous-mĂȘme de trouver le problĂšme.
Il est tout Ă fait normal que certains problĂšmes demandent du temps, de la rĂ©flexion, et parfois mĂȘme un peu de frustration. Câest prĂ©cisĂ©ment dans ces moments dâeffort que lâapprentissage sâancre rĂ©ellement.
Consulter un solutionnaire avant dâavoir tentĂ© lâexercice par soi-mĂȘme, ou le parcourir trop rapidement, revient Ă court-circuiter le processus dâapprentissage. Ce nâest pas simplement contre-productif, câest pĂ©dagogiquement dĂ©sastreux.
En sautant lâĂ©tape de la rĂ©flexion personnelle, on prive son cerveau de lâoccasion de construire des connexions durables. Et Ă force de rĂ©pĂ©ter ce rĂ©flexe, on risque de passer Ă cĂŽtĂ© des compĂ©tences essentielles, ce qui peut mener Ă des Ă©checs plus tard, mĂȘme si tout semble facile sur le moment. Alors oui, prenez le temps. Lâerreur fait partie du jeu. Câest en cherchant, en tĂątonnant, en doutant, quâon devient rĂ©ellement compĂ©tent. Le solutionnaire doit ĂȘtre un outil de validation, pas un raccourci.
đš Solution des exercices de crĂ©ation :
Le niveau de Ph,
Validation de paramĂštres,
Solutions d'une équation quadratique,
Remplacer des instructions,
Calcul de la note finale d'un cours,
GĂšnes Myc et P21