fiche mémo : 1.4. Conditions et instructions conditionnelles.¶

Modifiez la manière dont les fonctions s'exécutent, en fonction de l'entrée.¶

Vincent GODARD - V1- 24/01/2025¶

Cours Introduction à la programmation¶

Département de géographie - L3 - Université de Paris 8¶

Traduction librement (largement) inspirée de : https://www.kaggle.com/code/alexisbcook/conditions-and-conditional-statements

Sources :

Kaggle : https://www.kaggle.com/learn

Python Tutorial : https://www.w3schools.com/python/default.asp

Cours de Python : https://python.sdv.u-paris.fr/00_avant_propos/

Téléchargement des documents nécessaires :

Dossier compressé à télécharger => ici.

1. Introduction¶¶

Vous avez déjà vu que lorsque vous modifiez la valeur d'entrée d'une fonction, vous obtenez souvent une sortie différente. Par exemple, considérez une fonction add_five() qui ajoute simplement cinq à n'importe quel nombre et renvoie le résultat. Ensuite, add_five(7) renverra une sortie de 12 (=7+5), et add_five(8) renverra une sortie de 13 (=8+5). Notez que quelle que soit l'entrée, l'action que la fonction exécute est toujours la même : elle ajoute toujours cinq.

Mais vous pourriez plutôt avoir besoin d'une fonction qui exécute une action qui dépend de l'entrée. Par exemple, vous pourriez avoir besoin d'une fonction add_three_or_eight() qui ajoute trois si l'entrée est inférieure à 10, et ajoute huit si l'entrée est 10 ou plus. Ensuite, add_three_or_eight(1) renverra 4 (= 1+3), mais add_three_or_eight(11) renverra 19 (= 11+8). Dans ce cas, l'action effectuée par la fonction varie en fonction de l'entrée.

Dans cette leçon, vous apprendrez à utiliser des conditions et des instructions conditionnelles pour modifier la manière dont vos fonctions s'exécutent.

2. Conditions¶¶

En programmation, les conditions sont des énoncés qui sont soit vrais, soit faux. Il existe de nombreuses façons différentes d'écrire des conditions en Python, mais certaines des façons les plus courantes d'écrire des conditions comparent simplement deux valeurs différentes. Par exemple, vous pouvez vérifier si 2 est supérieur à 3.

In [ ]:
# 2 est-il plus grand que 3 ?
print(2 > 3)

Python identifie cela comme False, car 2 n'est pas supérieur à 3.

Vous pouvez également utiliser des conditions pour comparer les valeurs des variables. Dans la cellule de code suivante, var_one a une valeur de 1 et var_two a une valeur de deux. Dans les conditions, nous vérifions si var_one est inférieur à 1 (ce qui est False), et nous vérifions si var_two est supérieur ou égal à var_one (ce qui est True).

In [ ]:
## Succession de conditions
# définition des variables
var_one = 1
var_two = 2

# Résultats des requêtes
print(var_one < 1)
print(var_two >= var_one)

Pour une liste de symboles courants que vous pouvez utiliser pour construire des conditions, consultez le tableau ci-dessous.

Symbole : Signification

== : est égal à

!=  : n'est pas égal à

<  : inférieur à

<=  : inférieur ou égal à

>  : supérieur à

>=  : supérieur ou égal à

Remarque importante : lorsque vous vérifiez que deux valeurs sont égales, assurez-vous d'utiliser le signe == et non le signe =.

var_one == 1 vérifie si la valeur de var_one est 1, mais

var_one = 1 définit la valeur de var_one sur 1.

3. Instructions conditionnelles¶¶

Les instructions conditionnelles utilisent des conditions pour modifier la manière dont votre fonction s'exécute. Elles vérifient la valeur d'une condition, et si la condition est évaluée à True, alors un certain bloc de code est exécuté. (Sinon, si la condition est False, alors le code n'est pas exécuté.)

Vous verrez plusieurs exemples de cela dans les sections suivantes.

3.1. Instructions "if"¶¶

Le type le plus simple d'instruction conditionnelle est une instruction "if". Vous pouvez en voir un exemple dans la fonction assessment_temp() ci-dessous. La fonction accepte une température corporelle (en degrés Celsius) en entrée.

○ Au départ, message est défini sur "Température normale".

○ Ensuite, si temp > 38 est True (par exemple, la température corporelle est supérieure à 38°C), le message est mis à jour sur "Fièvre !". Sinon, si temp > 38 est False, le message n'est pas mis à jour.

○ Enfin, message est renvoyé par la fonction.
In [ ]:
# Définition de la fonction
def evaluate_temp(temp):
    # Définir un message initial
    message = "Température normale."

    # Mettre à jour la valeur du message uniquement si la température est supérieure à 38
    if temp > 38 :
        message = "Fièvre !"
    return message

Dans la cellule de code suivante, nous appelons la fonction, où la température est de 37 °C. Le message est « Température normale », car la température est inférieure à 38 °C (temp > 38 est évalué à False) dans ce cas.

In [ ]:
# Afficher un message pour une température de 37°C
print(evaluate_temp(37))

Cependant, si la température est de 39°C, étant donné que celle-ci est supérieure à 38°C, le message est mis à jour en « Fièvre !

In [ ]:
# Afficher un message pour une température de 39°C
print(evaluate_temp(39))

Notez qu'il existe deux niveaux d'indentation :

○ Le premier niveau d'indentation est dû au fait que nous devons toujours indenter le bloc de code à l'intérieur d'une fonction.

○ Le deuxième niveau d'indentation est dû au fait que nous devons également indenter le bloc de code appartenant à l'instruction « if ». (Comme vous le verrez, nous devrons également indenter les blocs de code pour les instructions « elif » et « else ».)

Notez que, comme l'instruction return n'est pas indentée sous l'instruction « if », elle est toujours exécutée, que temp > 38 soit True ou False.

3.2. Instructions « if ... else »¶

Nous pouvons utiliser des instructions « else » pour exécuter du code si une instruction est False. Le code sous l'instruction « if » est exécuté si l'instruction est True, et le code sous « else » est exécuté si l'instruction est False.

In [ ]:
# Définition de la fonction
def evaluate_temp_with_else(temp):
    if temp > 38:
        message = "Fièvre!"
    else:
        message = "Température normale."
    return message

Cette fonction evaluate_temp_with_else() a un comportement équivalent à la fonction evaluate_temp().

Dans la cellule de code suivante, nous appelons cette nouvelle fonction, où la température est de 37°C. Dans ce cas, temp > 38 est évalué à False, donc le code sous l'instruction "else" est exécuté et le message Normal temperature. est renvoyé.

In [ ]:
# Afficher un message pour une température de 37°C
print(evaluate_temp_with_else(37))

Comme avec la fonction précédente, nous indentons les blocs de code après les instructions « if » et « else ».

3.3. "if ... elif ... else" instructions¶

Nous pouvons utiliser "elif" (qui est l'abréviation de "else if") pour vérifier si plusieurs conditions peuvent être vraies. La fonction ci-dessous :

○ Vérifie d'abord si la température > 38. Si c'est vrai, alors le message est défini sur "Fièvre !".

○ Tant que le message n'a pas déjà été défini, la fonction vérifie ensuite si la température > 35. Si c'est vrai, alors le message est défini sur "Température normale".

○ Ensuite, si aucun message n'a toujours été défini, l'instruction "else" garantit que le message est défini sur "Basse température" et le message est imprimé.

Vous pouvez penser à "elif" comme disant... "ok, cette condition précédente (par exemple, temp > 38) était fausse, alors vérifions si cette nouvelle condition (par exemple, temp > 35) pourrait être vraie !"

In [ ]:
# Définition de la fonction
def evaluate_temp_with_elif(temp):
    if temp > 38:
        message = "Fièvre !"
    elif temp > 35:
        message = "Temperature normale."
    else:
        message = "Temperature faible !"
    return message

Dans la cellule de code ci-dessous, nous exécutons le code sous l'instruction « elif », car temp > 38 est False et temp > 35 est True. Une fois ce code exécuté, la fonction ignore l'instruction « else » et renvoie le message.

In [ ]:
# Afficher un message pour une température de 36°C
evaluate_temp_with_elif(36)

Enfin, nous étudions le cas où la température est inférieure à 35°C. Étant donné que les conditions dans les instructions "if" et "elif" sont toutes deux évaluées comme False, le bloc de code à l'intérieur de l'instruction "else" est exécuté.

In [ ]:
# Afficher un message pour une température de 34°C
evaluate_temp_with_elif(34)

4. Exemples de calculs¶

Dans les exemples précédents, des instructions conditionnelles ont été utilisées pour décider comment définir les valeurs des variables. Mais vous pouvez également utiliser des instructions conditionnelles pour effectuer différents calculs.

4.1. Quelques exemples pas très géographiques (: !¶

Dans l'exemple suivant, supposons que vous vivez dans un pays avec seulement deux tranches d'imposition. Toute personne gagnant moins de 12 000 € paie 25 p.100 d'impôts, et toute personne gagnant 12 000 € ou plus paie 30 p.100. La fonction ci-dessous calcule le montant de l'impôt dû.

In [ ]:
# Définition de la fonction
def get_taxes(earnings):
    if earnings < 12000:
        tax_owed = .25 * earnings
    else:
        tax_owed = .30 * earnings
    return tax_owed

La cellule de code suivante utilise la fonction.

In [ ]:
## Succession de conditions
# définition des variables
ana_taxes = get_taxes(9000)
bob_taxes = get_taxes(15000)

# Résultats des requêtes
print(ana_taxes)
print(bob_taxes)

Dans chaque cas, nous appelons la fonction get_taxes() et utilisons la valeur renvoyée pour définir la valeur d'une variable.

○ Pour ana_taxes, nous calculons les impôts dus par une personne qui gagne 9 000 $. Dans ce cas, nous appelons la fonction get_taxes() avec les gains fixés à 9 000 $. Ainsi, gains < 12 000 $ est vrai et tax_owed est fixé à 0,25 * 9 000 $. Nous renvoyons ensuite la valeur de tax_owed.

○ Pour bob_taxes, nous calculons les impôts dus par une personne qui gagne 15 000 $. Dans ce cas, nous appelons la fonction get_taxes() avec les gains fixés à 15 000 $. Ainsi, gains < 12 000 $ est faux et tax_owed est fixé à 0,30 * 15 000 $. Nous renvoyons ensuite la valeur de tax_owed.

Avant de passer à un autre exemple, vous souvenez-vous de la fonction add_three_or_eight() de l'introduction ? Elle accepte un nombre en entrée et ajoute trois si l'entrée est inférieure à 10, et sinon ajoute huit. Pouvez-vous comprendre comment vous écririez cette fonction ? Une fois que vous avez une réponse, cliquez sur le bouton « Afficher le code caché » ci-dessous pour voir la solution.

In [ ]:
# Définition de la fonction
def add_three_or_eight(number):
    if number < 10:
        result = number + 3
    else:
        result = number + 8
    return result
In [ ]:
# Afficher un message pour une température de 34°C
add_three_or_eight(12)

4.2. Un exemple plus géographique¶

Dans l'article Zone (https://hypergeo.eu/zone/), François Durand-Dastes définit les basses, les moyennes et les hautes latitudes.

○ Basses latitudes : entre 0° et 23°27′ N ou S ;

○ Moyennes latitudes : entre 23°27′ et 67°33′ N ou S ;

○ Hautes latitudes : entre 67°33′ et 90° N ou S.

Il existe d'autres définitions, selon les usages, comme pour observer des aurores boréales (https://www.spaceweatherlive.com/fr/aide/les-latitudes-basses-moyennes-et-hautes.html).

Pourriez-vous, avec les définitions données par François Durand-Dastes, indiquer la zone latitudinale des villes suivantes (arrondissez au degré le plus proche même si, comme on l'a vu dans la fiche mémo mem12intropro à la section 5.2., vous savez maintenant calculer des degrés décimaux !) :

○ Mourmansk 68°97'
○ Greenwich 51°28'
○ Bordeaux 44°50'
○ Quito 0°14'

Pourriez-vous faire de même avec Paris, Bergen, Accra ?

En utilisant les instructions "if ... elif ... else" par exemple !

Nous pouvons utiliser "elif" (qui est l'abréviation de "else if") pour vérifier si plusieurs conditions peuvent être vraies. La fonction ci-dessous :

○ Vérifie d'abord si la latitude est supérieure à 67. Si c'est vrai, alors le message "Hautes latitudes" s'affiche.

○ Si la condition n'est pas remplie, la fonction vérifie ensuite si la latitude est supérieure à 23. Si c'est vrai, alors le message "Moyennes latitudes" s'affiche.

○ Ensuite, si aucune des conditions précédentes n'a été remplie, l'instruction "else" affiche "Basses latitudes".

Vous pouvez penser à "elif" comme disant... "ok, cette condition précédente (par exemple, lat > 67) était fausse, alors vérifions si cette nouvelle condition (par exemple, lat > 23) pourrait être vraie !"

In [ ]:
# Définition de la fonction
def evaluate_lat_with_elif(lat):
    if lat > 67:
        message = "Hautes latitudes"
    elif lat > 23:
        message = "Moyennes latitudes"
    else:
        message = "Basses latitudes"
    return message

Dans la cellule de code ci-dessous, nous exécutons le code sous l'instruction « elif », car lat > 67 est False et lat > 23 est True. Une fois ce code exécuté, la fonction ignore l'instruction « else » et renvoie le message.

In [ ]:
# Afficher un message pour la latitude de Quito
evaluate_lat_with_elif(0)
In [ ]:
## Comme on l'a vu dans la fiche mémo mem12intropro à la section 5.2.
## on peut faire un peu d'habillage en utilisant la commande print()
print(f"La ville de Quito est dans les {evaluate_lat_with_elif(0)}.")

Pourriez-vous faire la même chose pour Paris, Bergen, Accra en cherchant la valeur de leur latitude ?

In [ ]:
# Afficher un message pour la latitude de Paris
evaluate_lat_with_elif(?)

4.3. Exemple avec plusieurs instructions « elif »¶

Jusqu'à présent, vous n'avez vu "elif" utilisé qu'une seule fois dans une fonction. Mais il n'y a pas de limite au nombre d'instructions "elif" que vous pouvez utiliser. Par exemple, le bloc de code suivant calcule la dose de médicament (en millilitres) à administrer à un enfant, en fonction de son poids (en kilogrammes).

Remarque : cette fonction ne doit pas être utilisée comme conseil médical et représente un faux médicament.

In [ ]:
# Définition de la fonction
def get_dose(weight):
    # La dose est de 1,25 ml pour toute personne de moins de 5,2 kg
    if weight < 5.2:
        dose = 1.25
    elif weight < 7.9:
        dose = 2.5
    elif weight < 10.4:
        dose = 3.75
    elif weight < 15.9:
        dose = 5
    elif weight < 21.2:
        dose = 7.5
    # La dose est de 10 ml pour toute personne pesant 21,2 kg ou plus
    else:
        dose = 10
    return dose

La cellule de code suivante exécute la fonction. Assurez-vous que le résultat a du sens pour vous !

○ Dans ce cas, l'instruction « if » était False et toutes les instructions « elif » sont évaluées à False, jusqu'à ce que nous obtenions un poids < 15,9, ce qui est True, et que la dose soit définie sur 5.

○ Une fois qu'une instruction « elif » est évaluée à True et que le bloc de code est exécuté, la fonction ignore toutes les instructions « elif » et « else » restantes. Après avoir ignoré celles-ci, il ne reste que l'instruction return, qui renvoie la valeur de dose.

○ L'ordre des instructions elif est important ici ! La réorganisation des instructions renverra un résultat très différent.
In [ ]:
# Afficher un message pour un poids de 12 kg.
print(get_dose(12))
Pourriez-vous adapter cet exercice pour en faire un exercice plus "géographique ?¶

N'oubliez pas de faire un petit topo explicatif avec des commentaires et/ou une cellule de texte en langage naturel.

In [ ]:
 
In [ ]: