Tests et boucles

Branchements conditionnels if….

Pour dévier le flot des instructions en fonction de la valeur (vraie/fausse, non_nulle/nulle, non_vide/vide) d’une expression (appelée ici condition), Python met à notre disposition les clauses ifelif et else.

La clause if simple permet d’exécuter un bloc d’instructions si la condition est vraie :

On peut rajouter une clause else (facultative, donc) pour exécuter un autre bloc si la condition est fausse :

Plutôt que d’emboîter des clauses if, on peut utiliser une clause if suivie par une (des) clause(s) elif :

Remarques :

  • Dans toutes les constructions ci-dessus, au plus un bloc est parcouru;
  • Ne pas oublier le caractère “deux points” qui termine chacune des lignes d’en-tête !!! ;
  • Se souvenir que si un bloc se réduit à une instruction, on peut le placer directement après le “deux points”.

Complément : expressions conditionnelles

Python offre la possibilité de former des expressions dont l’évaluation est soumise à une condition.
La syntaxe est la suivante: expression1 if condition else expression2
Le résultat est bien sûr l’évaluation de expression1 si la condition est vraie, et sinon c’est celle de expression2.

On voit sur le deuxième exemple ci-dessous comment emboîter deux expressions conditionnelles.

Les répétitions inconditionnelles (for…)

Pour répéter un certain nombre de fois un bloc d’instructions, on utilisera la construction suivante :

En fait, objet est ici est toute construction susceptible d’être parcourue : on pense bien sûr aux intervalles (range), mais aussi aux chaînes (parcourues caractère par caractère), aux listes, aux tuples, aux dictionnaires….

Le bloc qui fait suite à l’instruction for peut contenir deux instructions particulières, souvent attachées à un test if :

  • break provoque la sortie immédiate de la clause for.
  • continue passe directement à l’étape suivante de la boucle (ce qui reste du bloc après continue est donc ignoré).

Les répétitions conditionnelles (while…)

Pour répéter un bloc d’instructions tant qu’une condition est réalisée, Python nous propose la clause while :

Quelques remarques classiques sur ce genre de construction :

  • Si condition est fausse dès le départ, le bloc qui suit n’est jamais parcouru.
  • Dans la plupart des cas, le bloc qui suit l’instruction d’en-tête while agit sur la condition, de sorte que celle-ci, vraie au départ, devient fausse et provoque la sortie de la clause.
  • On peut écrire une clause while avec une condition toujours vraie (par exemple while 1: ou while True:) à condition (pour éviter une boucle infinie) de sortir par un autre moyen (notamment par break ou return).

Dans l’exemple ci-dessous, on illustre la clause while avec l’exemple classique de la suite dite de Syracuse.

Celle-ci est définie par une valeur initiale x0 et la règle suivante : si xn est pair alors xn+1 = xn/2 sinon xn+1 = 3xn + 1.

Une conjecture célèbre dit que l’un des xn vaut 1 (et la suite boucle alors sur les valeurs 1 → 4 → 2 → 1). On étudie ici le comportement très intéressant obtenu pour la valeur initiale x0 = 27 :

Le bloc qui fait suite à l’instruction while peut contenir deux instructions particulières, souvent attachées à un test if :

  • break provoque la sortie immédiate de la clause while;
  • continue ramène à l’évaluation de la condition (ce qui restait du bloc après continue est donc ignoré).

Fonctions récursives

Une fonction récursive est une fonction qui s’appelle elle-même, dans sa propre définition. Les deux exemples les plus simples sont l’algorithme d’Euclide et la fonction factorielle :