Contenus | Capacités attendues | Commentaires |
---|---|---|
Constructions élémentaires | Mettre en évidence un corpus de constructions élémentaires. boucles non bornées, appels de fonction. | Séquences, affectation, conditionnelles, boucles bornées, |
Les structures conditionnelles permettent d'écrire des programmes qui peuvent s'éxecuter différemment selon les conditions dans lesquelles ils sont exécutés. Plus formellement, c'est une structure de contrôle pouvant dévier le flot de contrôle du programme.
Image par Arne Hückelheim — Travail personnel, CC BY-SA 3.0, Lien
Nous avons vu précédemment que les programmes étaient une suite d'instructions. Il est cependant possible d'utiliser des blocs d'instructions qui ne seront pas exécutés dès leur apparition dans le programme à l'opposé des instructions écrites dans le flot principal(à gauche de la ligne).
En python, les blocs sont délimités grâce aux tabulations et introduits grâce à deux points :
.
entrée dans un bloc:
ligne 1 du bloc
ligne 2 du bloc
...
retour dans l’exécution normale du programme ligne à ligne.
Aujourd'hui, nous allons utiliser des structures de contrôle qui permettent d’exécuter: des blocs, en fonction de conditions. On parle de structure conditionnelles.
Dans ce types de programme, le code sera toujours interprété ligne par ligne, cependant certains blocs de code ne seront exécutés que si une condition donnée est vraie.
if
Le bloc d'instruction contenu n'est exécuté que si la condition est vérifiée.
Syntaxe
if condition:
instruction 1
instruction 2
...
a = 3
if a > 0:
a = -a
print(a)
-3
Dans le programme précédent l'instruction if a > 0:
est toujours exécutée par l'interpréteur, car elle est dans le flux normal du programme(en début de ligne).
Par contre, l'instruction a = -a
n'est exécutée que si la condition a > 0
a renvoyé True
, il s'agit d'un bloc relatif à l'instruction if a > 0:
qui le précède Elle est indentée avec quatre espaces. Si j'affecte la valeur négative -5 à a
, ce bloc ne sera pas exécuté, et le changement de signe n'aura pas lieu.
a = -5
if a > 0:
a = -a
print(a)
-5
else
Indique le bloc d'instruction a exécuter si la condition n'est pas vérifiée.
Syntaxe
if condition:
bloc d'instructions exécuté si la condition est vraie
else:
bloc d'instructions exécuté si la condition est fausse
a = -3
if a > 0:
a = -a
else:
a = a*100
print(a)
-300
Comme initialement la variable a n'était pas positive, c'est le bloc d'instructions else
qui a été exécuté.
elif
Cette instruction permet de réaliser des tests imbriqués, c'est un raccourci pour les instructions else et if.
Syntaxe
if condition 1:
bloc d'instructions exécuté si la condition 1 est vraie
elif condition 2:
bloc d'instructions exécuté si la condition 1 est fausse et la condition 2 vraie
else:
bloc d'instructions exécuté si les conditions 1 et 2 sont fausses
a = 3
if a == 7:
print("C'est un chiffre porte bonheur")
elif a == 3:
print("Quelques modifications sont nécessaires")
a += 4
print(a)
Quelques modifications sont nécessaires
7
Vous voila maintenant armés pour aborder des programmes beaucoup plus riches dans lesquels vous allez pouvoir prendre des décisions en fonction des données qui lui arrivent.
Les opérateurs booléens sont des opérateurs de comparaison qui retournent un objet de type booléen: True
ou False
.
Soit x et y des variables de type int
ou float
, les opérateurs de comparaison sont:
x < y
: x est-il inférieur à y ?x <= y
: x est-il inférieur ou égal à y ?x > y
: x est-il supérieur à y ?x >= y
: x est-il supérieur ou égal à y ?x == y
: x est-il égal à y ?x != y
: x est-il différent y ?x = 3
y = 5
print(x < y)
True
print(x <= y)
True
Dans l'environnement jupyter notebook, le print sur la dernière ligne est optionnel, et le résultat de la dernière expression entrée est evalué et affiché.
x > y
False
x >= y
False
x == y
False
x != y
True
On peut constater que ces instructions retournent systématiquement un objet de type booléen.
type(x > y)
bool
Ou un erreur si on cherche à comparer l'incomparable:
x < "y"
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-9bebce4cbfdb> in <module>
----> 1 x < "y"
TypeError: '<' not supported between instances of 'int' and 'str'
ATTENTION: Comme vous l'avez remarqué pour tester une égalité on utilise le double signe égal ==
. Tout simplement car le signe égal seul =
est déjà utilisé pour l'affectation de variables.