Structures conditionnelles simples et avec alternative
Conditions
1. Définition : Une instruction conditionnelle vérifie si une certaine condition est vraie avant d’executer son code :
Exemple :
Remarquer que l’instruction if .. condition ..: finit par 2 points :, et que la ligne suivante est indentée
Toute portion de code associée à une structure de contrôle (finissant par 2 points :) nécéssite une indentation.
2. Les blocs du programme En Python, on utilise l’indentation (le retrait de la ligne) pour rendre compte des blocs de code.
de pybloc au script python
3. L’alternative if - else
Une instruction if - else contient une instruction if qui s’execute si la condition est True et une clause else qui s’execute si la condition est False.
4. Conditions multiples if - elif - else
Un bloc if - elif - else comprend une premiere instruction if, puis une suite de conditions de tests elif si le premier test echoue, puis un bloc else qui s’execute si tous les autres tests échouent.
Même s’il n’est pas obligatoire, il est fortement recommandé de finir une série de conditions elif par le bloc else.
Rappelez vous:
elifest toujours suivi d’une conditionelsen’est pas suivi d’une condition. C’est l’alternative, dont le bloc est executé lorsqu’aucune des conditions precedentes n’est vraie.
Tests logiques
Il s’agit d’une expression booléenne qui est évaluée est qui renvoie True si elle est vrai, False sinon.
Opérateurs de comparaison
Quelques exemples de tests logiques :
Opérateurs et combinaisons logiques
L’expression peut aussi contenir les opérateurs logiques de combinaisons: and, or, not.
L’expression suivante, A and B est evaluée à True si A vaut True, et B vaut True. Dans tous les autres cas, (A vaut False, ou B vaut False, ou A et B valent False), A and B est evaluée à False. On peut résumer tous les cas dans une table logique:
| A | B | A and B |
|---|---|---|
False |
False |
False |
False |
True |
False |
True |
False |
False |
True |
True |
True |
Pour l’opérateur logique or:
| A | B | A or B |
|---|---|---|
False |
False |
False |
False |
True |
True |
True |
False |
True |
True |
True |
True |
et pour l’opérateur not
| A | not A |
|---|---|
False |
True |
True |
False |
Exemple:
Une instruction if peut également tester une valeur booléenne et exécuter son code si cette valeur vaut True, comme par exemple, ci-dessous, avec if jeu_actif:
Il n’est pas nécéssaire d’écrire == True comme ici avec if jeu_actif == True:
Test sur une liste
On peut aussi vérifier si un élement existe dans une liste :
Test sur un dictionnaire
Le mot-clé in permet de tester si une clé est présente dans le dictonnaire:
Remarque : 0 et None
Dans le test logique, 0 et None se comportent comme s’il s’agissait de False:
Ce petit script, lorsqu’il est executé, renvoie toujours True quel que soit le nombre saisi, mais False dans les cas suivants. Si on saisit
- 0 # zero
- None # le type Rien
A savoir: dans certains cas, on peut faire l’économie de l’opérateur logique. Dans l’instruction conditionnelle if n, la condition vaut True dès que n est différent de 0 ou de None, ou bien n vaut True.
Ainsi, les scripts suivants sont équivalents
Boucles non bornées: while
1. Definition: Une boucle non bornée permet de répéter un élément de code un nombre à priori inconnu de fois.
On écrit l’instruction: while <condition d execution>:
Le bloc de code est indenté sous cette première ligne:
Cette boucle repète l’execution d’un bloc de code (instruction 1, instruction 2), tant que la <condition> est evaluée à True. Le test sur la <condition> est réalisé à chaque itération.
Lorsque cette <condition> n’est plus réalisée, le programme passe à l’instruction suivante.
Souvent, il sera nécessaire de démarrer le programme par initier une variable (celle utile pour la condition d’execution). De sorte que cette condition d’execution soit évaluée à True, et que le bloc de cette boucel s’execute au moins une fois.
Exemple 1: Réaliser un compteur
- à la première itération, i vaut 0, donc la condition
i <= 10est évaluée àTrueet le bloc est executé. Le programme affiche 1 et i finit avec la valeur 2 (i = i + 1) - La boucle se poursuit jusqu’à ce que i soit égal à 11. Alors
i <= 10est évaluée àFalseet le programme poursuit APRES la boucle, avec la dernière instruction: affiche"c'est fini"
Exemple 2: reste de la division euclidienne de 40 par 3
- A la première itération,
rvaut 40 donc la<condition>r > 3 estTrue. r est diminué de 3 et prend la valeur 37. - A la dernière itération,
4 >= 3est evalué àTrue.rest diminué de 3 et prend la valeur 1 - Puis
r >= 3est evalué àFalse. Le bloc n’est pas executé et le programme s’arrête s’il n’y a pas d’autres instructions (ou poursuit le script sinon).
2. Le problème de l’arrêt
Pour le script précédent, si l’on avait remplacé la condition r >= 3 par r == 3 le programme aurait pu executer le bloc r = r - 3 indefiniment. r aurait pris successivement les valeurs 40, 37, … 4, 1, -2, -5, … etc, sans jamais prendre la valeur 0.
C’est le problème avec les boucles non bornées. Celles-ci peuvent ne pas finir, ce qui peut bloquer la machine.
Cet effet de boucle infini peut être recherché, par exemple en robotique, où l’on veut que le programme se poursuive indéfiniment. Ainsi, la structure d’un programme python sur carte microbit commence par la structure suivante:
Mais dans le cas général, il faudra veiller à ce que la boucle finisse à un moment donné. Par exemple, dans le script suivant, on met l’instruction break qui a pour effet d’interrompre la boucle lorsque break est executée :
Exemple: