Aller au contenu

Structures conditionnelles⚓︎

À savoir⚓︎

Avec Python, on a les constructions suivantes possibles :

if condition:
    action()

Si condition est évaluée à True

  • alors action() est exécutée.
if condition:
    action()
else:
    autre_action()

Si condition est évaluée à True

  • alors action() est exécutée,
  • sinon, autre_action() est exécutée.
if condition_1:
    action_1()
elif condition_2:
    action_2()
elif condition_3:
    action_3()
else:
    action_autres_cas()
  • elif est la contraction de else if, pour « sinon si ».
  • Il peut y avoir autant de blocs elif que l'on souhaite.
  • On peut terminer, par un bloc else pour les cas non traités.

Cette construction est utilisée classiquement pour traiter différemment une liste de cas.

Exemples⚓︎

La suite de Syracuse d'un entier \(N>0\) est définie par récurrence, de la manière suivante :

  • \(u_0 = N\)
  • pour tout entier naturel \(n\) : \(u_{n+1} = \begin{cases}\dfrac{u_n}{2}&\text{si } u_n \text{ est pair,}\\3×u_n + 1&\text{si } u_n \text{ est impair.}\end{cases}\)

On peut définir la fonction terme_suivant

def terme_suivant(u_n):
    "Renvoie le terme suivant `u_n` dans une suite de Syracuse"

    if u_n % 2 == 0:
        return u_n // 2
    else:
        return 3 * u_n + 1

On peut alors l'utiliser en console :

>>> terme_suivant(7)
22
>>> terme_suivant(22)
11
>>> terme_suivant(11)
34

Dans la console, penser à utiliser la flèche du clavier pour pouvoir ne modifier que le paramètre.

Répétition d'instructions

On devine rapidement l'intérêt de pouvoir répéter des instructions :

  • un nombre choisi de fois, ou alors
  • tant qu'une certaine condition est vérifiée.

On verra ceci très bientôt.

Exercice⚓︎

Que dire des scripts suivants ?

  • Sont-ils corrects ?
  • Sont-ils équivalents ?
  • Sont-ils bien écrits ?
if condition_1:
    ####################
    #                 ##
    action_1()        ##
    #                 ##
    ####################
else:
    if condition_2:
        ####################
        #                 ##
        action_2()        ##
        #                 ##
        ####################
    else:
        if condition_3:
            ####################
            #                 ##
            action_3()        ##
            #                 ##
            ####################
        else:
            ####################
            #                 ##
            action_0()        ##
            #                 ##
            ####################
if condition_1:
    ####################
    #                 ##
    action_1()        ##
    #                 ##
    ####################
elif condition_2:
    ####################
    #                 ##
    action_2()        ##
    #                 ##
    ####################
elif condition_3:
    ####################
    #                 ##
    action_3()        ##
    #                 ##
    ####################
else:
    ####################
    #                 ##
    action_0()        ##
    #                 ##
    ####################
if condition_1:
    ####################
    #                 ##
    action_1()        ##
    #                 ##
    ####################
elif condition_2:
        ####################
        #                 ##
        action_2()        ##
        #                 ##
        ####################
    elif condition_3:
            ####################
            #                 ##
            action_3()        ##
            #                 ##
            ####################
        else:
            ####################
            #                 ##
            action_0()        ##
            #                 ##
            ####################
if condition_1:
    ####################
    #                 ##
    action_1()        ##
    #                 ##
    ####################
elif condition_2:
        ####################
        #                 ##
        action_2()        ##
        #                 ##
        ####################
elif condition_3:
            ####################
            #                 ##
            action_3()        ##
            #                 ##
            ####################
else:
                ####################
                #                 ##
                action_0()        ##
                #                 ##
                ####################
Solution

Le script C est incorrect, elif condition_3: est mal indenté, le dernier else également.

Un elif doit être indenté au même niveau que le elif précédent ou if précédent.

Les scripts A, B et D sont équivalents ; oui, techniquement.

Le D est mal écrit, on a le droit d'indenter chaque bloc autant qu'on veut, mais, ici, c'est mal choisi.

Le A est maladroit. On préfère utiliser elif dans ce cas là.

Le B, voilà la bonne méthode.