Structures de contrôle

Jusqu’à maintenant un programme était une séquence linéaire. Les instructions s’exécutaient

  • les unes après les autres,

  • de haut en bas,

  • chacune une seule fois.

Dans cette section nous allons voir des structures de contrôle qui permet de changer cette séquence purement linéaire:

  • L’instruction conditionnelle permet de ne pas exécuter certaines instructions.

  • La boucle permet d’exécuter certaines instructions plusieurs fois.

Indentation

On appelle bloc une ou plusieurs instructions qui forment un ensemble. En C ou JavaScript un bloc est délimité avec des accolades {...}. L’indentation est encouragé mais reste optionnelle.

En Python l’indentation est obligatoire. C’est la façon officiel de designer un bloc. Ceci a deux avantages:

  • pas besoin d’accolades pour délimiter une bloc

  • la structure des blocs est clair et visuel

Une indentation est un retrait du code par rapport à la marge gauche de 4 caractères. Elle peut être insérée avec la touche tabulateur TAB (symbolisée par une flèche à gauche du clavier).

Une suite d’instructions indentée de la même manière forme un bloc. Ces blocs se trouvent dans

  • la définition de fonction (def),

  • l’instruction conditionnelle (if-else)

  • la boucles (for, while)

En Python le symbole : en fin de ligne introduit un sous-bloc qui doit être indenté. Voici des sous-blocs à la suite des mot-clés def, if, else, for.

def f(x):
    return x * x

if x > 0:
    print('positif')
else:
    print('négatif)

for i in range(3):
    print('itération', i) 

Dans l’exemple suivant nous avons deux fois une boucle qui fait 3 itérations.

Dans la première boucle l’instruction print('dedans') fait parti du bloc d’itération et elle est exécutée 3 fois.

Dans la deuxième boucle l’instruction print('dehors') ne fait pas parti du bloc d’itération et elle est exécutée seulement 1 fois.

Opérations de comparaison

Les 6 opérateurs de comparaison permettent de comparer 2 valeurs.

  • plus grand que (>)

  • plus petit que (<)

  • plus petit ou égal à (<=)

  • plus grand ou égal à (>=)

  • égal à (==)

  • non égal à (!=)

Dans l’exemple suivant nous affectons une valeur à la variable a et nous effectuons 3 comparaisons. Le résultat d’une comparaison est une valeur booléenne (valeur logique) qui prend la valeur True ou False

Note: Ne confondez pas l’opérateur d’affectation (=) avec l’opérateur de comparaison (==).

L’instruction if

L’instruction if permet d’exécuter un bloc si une condition est vraie, sinon le programme suit son cours sans exécuter ce bloc.

L’exemple suivant affiche majeur si l’âge est plus grand ou égale à 18.

L’instruction if…else

L’instruction if...else permet de choisir entre deux blocs selon une condition. Si la condition est vraie, le bloc if est exécuté; sinon, le bloc else est exécuté.

L’instruction if…elif…else

L’instruction if...elif...else permet d’exécuter un bloc d’instruction si une condition est vraie. Si la première condition n’est pas remplie, une autre est testée.

Opérations logiques

Les opérateurs logiques permettent de combiner deux valeurs logiques.

  • et logique (and)

  • ou logique (or)

Pour tester si un nombre x est dans l’intervalle (a, b) il faut combiner deux comparaisons avec une opération logique.

L’opérateur not inverse de la valeur logique.

  • True devient False

  • False devient True

Une double inversion revient à l’identité.

Dans l’exemple suivant, essayez de changer la valeur de p.

La boucle for

Le boucle for permet d’itérer sur un ensemble de valeurs. Par exemple une chaine de texte est un ensemble de caractères.

Le mot itérer veut dire de parcourir l’ensemble et assumer une valeur particulière à chaque tour, en passant dans l’ordre, de la première valeur à la dernière.

Dans l’exemple suivant nous itérons à travers la chaine 'hello'

Nous pouvons aussi itérer sur une plage numérique. L’expression range(a, b) exprime la plage numérique allant de a à b-1. Dans notre cas nous itérons de 3 à 9.

Nous pouvons faire des calculs avec chaque valeur de la boucle.

La boucle while

La boucle while exécute un bloc tant qu’une condition est vraie.

Nous pouvons l’utiliser pour créer un compteur à rebours. Pour faire l’attente d’une seconde nous importons la fonction sleep() du module time.

Nous pouvons aussi utiliser pour deviner un nombre. Ici nous importons la fonction randint() du module random. Elle fournit un nombre entier aléatoire entre deux bornes (1, 99).

La fonction input() ne retourne que le type string. La fonction int() transforme le type string (chaine) en entier (integer).

Exercices

Exercice 1 - intervalle

Vérifiez si une variable x contient une valeur qui est entre deux bornes [a, b].

Exercice 2 - question

Faites un programme qui pose une question simple à l’utilisateur. Si sa réponse est juste, affichez Bravo.

Exercice 3 - age

Faites un programme qui demande à l’utilisateur son âge. Si l’âge est supérieur ou égal à 18, le programme doit afficher: “Vous êtes majeur, vous pouvez voter” et si l’âge est inférieur à 18, le programme doit afficher: “Vous êtes mineur, vous pourrez voter dans (calcul de la différence) année(s)”

Exercice 4 - jeu

Faites un programme qui demande à l’utilisateur d’entrer un chiffre entre 0 et 2. Si l’utilisateur choisit

  • 0: affichez Caillou

  • 1: affichez Feuille

  • 2: affichez Ciseaux.

Exercice 5 - carré

Faites un programme qui affiche un carré de longueur n avec le caractère 'x'. Mais vide à l’intérieur

Exercice 6 - triangle

Faites un programme qui affiche un triangle de hauteur n avec des x.

Exercice 7 - rectangle

Faites un programme qui affiche une boite de hauteur a et longueur b avec des x. L’intérieur de la boite doit rester vide.