CPGE OUJDA                                                                                                                                                                                                                                                        SUP

Conditions et blocs d'instructions

Les conditions sont un concept essentiel en programmation. Elles vont vous permettre de faire une action précise si, par exemple, une variable est positive, une autre action si cette variable est négative, ou une troisième action si la variable est nulle. voici un exemple clair d'une condition prise sous sa forme la plus simple. Les commentaires sont des messages qui sont ignorés par l'interpréteur et qui permettent de donner des indications sur le code. En Python, un commentaire débute par un dièse (« # ») et se termine par un saut de ligne. Tout ce qui est compris entre ce # et ce saut de ligne est ignoré.

1

2

3

4

5

6

7

>>> # Premier exemple de condition

>>> a = 5

>>> if a > 0: # Si a est supérieur à 0

...     print("a est supérieur à 0.")

...

a est supérieur à 0

Il y a deux notions importantes sur lesquelles je dois à présent revenir, elles sont complémentaires ne vous en faites pas.

La première est celle de bloc d'instructions. On entend par bloc d'instructions une série d'instructions qui s'exécutent dans un cas précis (par condition, comme on vient de le voir, par répétition, comme on le verra plus tard…). Ici, notre bloc n'est constitué que d'une seule instruction (la ligne 4 qui fait appel à print). Mais rien ne vous empêche de mettre plusieurs instructions dans ce bloc.

1

2

3

4

5

6

7

a = 5

b = 8

if a > 0:

    # On incrémente la valeur de b

    b += 1

    # On affiche les valeurs des variables

    print("a =",a,"et b =",b)

La seconde notion importante est celle d'indentation. On entend par indentation un certain décalage vers la droite, obtenu par un (ou plusieurs) espaces ou tabulations.

Les indentations sont essentielles pour Python. Il ne s'agit pas, comme dans d'autres langages tels que le C++ ou le Java, d'un confort de lecture mais bien d'un moyen pour l'interpréteur de savoir où se trouvent le début et la fin d'un bloc.

Forme complète (if, elif et else)
Les limites de la condition simple en if

La première forme de condition que l'on vient de voir est pratique mais assez incomplète.

Considérons, par exemple, une variable a de type entier. On souhaite faire une action si cette variable est positive et une action différente si elle est négative. Il est possible d'obtenir ce résultat avec la forme simple d'une condition :

1

2

3

4

5

>>> a = 5

>>> if a > 0: # Si a est positif

...    print("a est positif.")

... if a < 0: # a est négatif

...    print("a est négatif.")

 si a est égal à 0, aucune action n'a été prévue si a vaut 0.

Cette méthode n'est pas optimale, tout d'abord parce qu'elle nous oblige à écrire deux conditions séparées pour tester une même variable. De plus, et même si c'est dur à concevoir par cet exemple, dans le cas où la variable remplirait les deux conditions (ici c'est impossible bien entendu), les deux portions de code s'exécuteraient.

La condition if est donc bien pratique mais insuffisante.

L'instruction else:

Le mot-clé else, qui signifie « sinon » en anglais, permet de définir une première forme de complément à notre instruction if.

1

2

3

4

5

>>> age = 21

>>> if age >= 18: # Si age est supérieur ou égal à 18

...    print("Vous êtes majeur.")

... else: # Sinon (age inférieur à 18)

...    print("Vous êtes mineur.")

 Il faut  bien se rendre compte que Python exécute soit l'un, soit l'autre, et jamais les deux. Notez que cette instruction else doit se trouver au même niveau d'indentation que l'instruction if qu'elle complète. De plus, elle se termine également par deux points puisqu'il s'agit d'une condition, même si elle est sous-entendue.

L'exemple de tout à l'heure pourrait donc se présenter comme suit, avec l'utilisation de else :

1

2

3

4

5

>>> a = 5

>>> if a > 0:

...    print("a est supérieur à 0.")

... else:

...    print("a est inférieur ou égal à 0.")

Mais… le résultat n'est pas tout à fait le même, si ?

Non, en effet. Vous vous rendrez compte que, cette fois, le cas où a vaut 0 est bien pris en compte. En effet, la condition initiale prévoit d'exécuter le premier bloc d'instructions si a est strictement supérieur à 0. Sinon, on exécute le second bloc d'instructions.

Si l'on veut faire la différence entre les nombres positifs, négatifs et nuls, il va falloir utiliser une condition intermédiaire.

L'instruction elif:

Le mot clé elif est une contraction de « else if », que l'on peut traduire très littéralement par « sinon si ». Dans l'exemple que nous venons juste de voir, l'idéal serait d'écrire :

·         si a est strictement supérieur à 0, on dit qu'il est positif ;

·         sinon si a est strictement inférieur à 0, on dit qu'il est négatif ;

·         sinon, (a ne peut qu'être égal à 0), on dit alors que a est nul.

Traduit en langage Python, cela donne :

1

2

3

4

5

6

>>> if a > 0: # Positif

...     print("a est positif.")

... elif a < 0: # Négatif

...     print("a est négatif.")

... else: # Nul

        print("a est nul.")

De même que le else, le elif est sur le même niveau d'indentation que le if initial. Il se termine aussi par deux points. Cependant, entre le elif et les deux points se trouve une nouvelle condition. Linéairement, le schéma d'exécution se traduit comme suit :

1.       On regarde si a est strictement supérieur à 0. Si c'est le cas, on affiche « a est positif » et on s'arrête là.

2.       Sinon, on regarde si a est strictement inférieur à 0. Si c'est le cas, on affiche « a est négatif » et on s'arrête.

3.       Sinon, on affiche « a est nul ».

Sachez qu'il est heureusement possible d'imbriquer des conditions et, dans ce cas, l'indentation permet de comprendre clairement le schéma d'exécution du programme.

Autres exemples avec saisie:

print("Entrer un nombre plus petit que 100.")

nb = float(input())

 

if nb < 100:

    print("Ce nombre convient.")

else:

    print("Ce nombre est trop grand.")

A l’exécution du script, l’ordinateur va afficher la chaîne “Entrer un nombre plus petit que 100.” et va marquer un temps d’arrêt. En effet, la commande input() attend ici que l’on rentre un nombre et que l’on appuie sur la touche Entrée. Mais ce nombre est d’abord saisi en tant que chaine de caractères, puis converti en nombre (flottant) grâce à la fonction float. Ce nombre sera alors affecté à la variable nb.

Attention

Avec Python3, la fonction input() renvoie systématiquement une chaîne de caractères. Donc si c’est un nombre que l’on veut manipuler, il faudra utiliser la fonction int() s’il s’agit d’un entier ou float() s’il s’agit d’un décimal. Par exemple :

chaine = input()

nb = float(chaine)

ou bien directement

nb = float(input())

Comparaison de nombres

Vous aurez souvent à comparer des nombres. Voici une liste des opérateurs que vous pourrez utiliser.

Doubles inégalités

Python permet de plus l’enchaînement des comparaisons.

En mathématiques, il n’est pas rare que l’on ait à écrire 3 \leq x \leq 7pour dire que x appartient à l’intervalle [3;7]. En Python, cela peut être fait grâce au connecteur and comme dans les autres langages.

>>> for x in range(5):#pour x dans 0..5 for sera vue plus loin

...     if 3 <= 2*x and 2*x <= 7:  # long et peu lisible

...         print(x, "est dans l'intervalle")

...     else:

...         print(x, "n'est pas dans l'intervalle")

...

Mais c’est bien plus lisible avec la double inégalité, et chaque expression (ici 2x) n’est évaluée qu’une fois.

>>> for x in range(5):

...     if 3 <= 2*x <= 7:  # plus concis et plus lisible

...         print(x, "est dans l'intervalle")

...     else:

...         print(x, "n'est pas dans l'intervalle")