deutsch     english    français     Imprimer

 

2.7 BRANCHEMENTS CONDITIONNELS (SÉLECTION)

 

 

INTRODUCTION

 

Ce que l’on entreprend dans la vie de tous les jours dépend souvent de plusieurs conditions. Par exemple, la manière dont vous allez vous rendre à l’école dépend de la météo. Vous vous dites : « S’il pleut aujourd’hui, je prends les transports publics et dans le cas contraire, j’y vais en vélo ». De manière semblable, le flux d’instructions dans un programme peut également dépendre de certaines conditions. Les branchements conditionnels sont des structures de contrôle permettant à un programme de modifier son exécution sur la base de certaines conditions et sont essentiels à n’importe quel langage de programmation. Les instructions suivant le if` sont uniquement exécutées si la condition est vraie et, dans le cas contraire, ce sont les instructions du bloc else qui sont exécutées.

CONCEPTS DE PROGRAMMATION:
Conditions, branchements conditionnels, sélection, structure if-else

 

 

VALIDATION DE SAISIES

 

Après la saisie de la longueur du côté dans la boîte de dialogue, le carré n’est dessiné que s’il tient complètement dans les limites de la fenêtre.

Il faut donc examiner la valeur de la variable s. Si s est inférieur à 300, un carré de côté s est dessiné, dans le cas contraire (else), un message apparaît dans la partie inférieure de la fenêtre de TigerJython. En programmation, cette construction est réalisée à l’aide d’une structure if.
 


from gturtle import *

def square(sidelength):    
    repeat 4: 
        forward(sidelength) 
        right(90)
      
makeTurtle()
s = inputInt("Enter the side length")
if s < 300:
    square(s)    
else:  
    print "The side length is too big"
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

 

 

MEMENTO

 

Les instructions du bloc if ne sont exécutées que si la condition est vraie et, dans le cas contraire, ce sont les instructions du bloc else qui sont exécutées. Le bloc else est facultatif.

Remarquez le double point obligatoire après la condition du if et après le else. D’autre part, les instructions prenant part aux blocs if` et else doivent être indentées de manière cohérente.

 

 

BRANCHEMENTS MULTIPLES

  À présent, on aimerait dessiner des carrés colorés. L’utilisateur peut spécifier la couleur via un nombre entier saisi dans la boîte de dialogue.On décide à l’aide d’une structure if de la couleur de remplissage à utiliser en fonction du nombre saisi. On teste d’abord si le nombre entré est 1 avec le bloc if.

Si ce n’est pas le cas, on teste s’il vaut 2 dans le bloc elif, puis s’il vaut 3 de la même manière. Finalement, pour tout autre nombre que 1, 2 ou 3, on utilise le bloc else pour choisir la couleur noire par défaut.

L’instruction fill(10, 10) va remplir la surface entourant le point de coordonnées (10, 10) avec la couleur spécifiée avec setFillColor(). Du fait que la tortue se retrouve au centre de la fenêtre aux coordonnées (0, 0) après avoir dessiné le carré, il est certain que le point (10, 10) se trouve à l’intérieur du carré.

 


from gturtle import *

def square():    
    repeat 4: 
        forward(100) 
        right(90)
      
makeTurtle()
n = inputInt("Enter a number: 1:red 2:green 3:yellow")
if n == 1:
    setFillColor("red")
elif n == 2: 
    setFillColor("green") 
elif n == 3:
    setFillColor("yellow") 
else:
    setFillColor("black")        
    
square()
fill(10, 10)
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

 

 

MEMENTO

 

Plusieurs conditions peuvent être évaluées de manière consécutive. Dans le cas où la condition du bloc if n’est pas vérifiée, l’interpréteur teste la condition du prochain bloc elif qui est une abréviation de else if. Si aucune des conditions elif n’est satisfaite, ce sont les instructions du bloc else qui sont exécutées.

Une erreur de débutant courante dans l’écriture des conditions consiste à utiliser le signe = pour tester une égalité entre deux expressions au lieu du double égal ==. En effet, il faut se rappeler que le symbole = représente l’opérateur d’affectation à une variable et non l’opérateur de comparaison.
Voici la notation utilisée pour les opérateurs de comparaison : >, >=, <, <=, ==,  !=.

Finalement, la fonction fill(x,y) permet de remplir des figures géométriques fermées en utilisant la couleur color préalablement choisie à cet effet en appelant setFillColor(color). Il faut cependant que le point (x,y) se trouve à l’intérieur de la figure.

 

 

CHOIX DE COULEUR, VARIABLES ALÉATOIRES

 

Pour remplir une figure a posteriori avec la fonction fill(), il faut que tous les pixels de son intérieur soient vierges de couleur. Pour créer de nouvelles figures pleines au-dessus de figures existantes, il faut utiliser conjointement les fonctions startPath()/fillPath(). Dans le programme suivant, on appelle la fonction askColor() faisant apparaître une boîte de dialogue sympathique permettant de choisir la couleur de l’étoile.

 

Pour dessiner les différentes étoiles, on utilise la fonction star(), qui prend comme paramètres la taille de l’étoile ainsi qu’un paramètre fill qui peut être vrai (True) ou faux (False) et qui détermine si l’étoile doit être remplie de couleur ou non.

from gturtle import *

makeTurtle()

def star(size, filled):
    if filled:
        startPath()
    repeat 9:
        forward(size)
        left(175)
        forward(size)
        left(225)
    if filled:
        fillPath()

clear("black")
repeat 5:
    color = askColor("Color selection", "yellow")
    if color == None:
        break
    setPenColor(color) 
    setFillColor(color)
    setRandomPos(400, 400)
    back(100)
    star(100, True)
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

 

 

MEMENTO

 

La fonction askColor() prend deux paramètres permettant de spécifier le texte affiche dans la barre de titre ainsi que la couleur initialement sélectionnée. Lorsque l’utilisateur clique sur le bouton OK, la fonction askColor retourne la couleur sélectionnée tandis qu’un clic sur le bouton Annuler force la fonction à retourner la valeur spéciale None. Il est donc possible d’utiliser une structure if pour tester si l’utilisateur a annulé le choix de la couleur et réagir en conséquence en sortant de la boucle repeat par le mot-clé break.

Une variable ou un paramètre qui prend les valeurs True ou False est qualifié de booléen [plus... nom provient du mathématicien George Boole qui a jeté les bases de la logique booléenne constituant un des fondements théoriques de l’informatique]. Il n’est pas très élégant d’écrire if filled == True : puisque filled est une valeur booléenne. On peut simplement écrire if filled  if filled:

 

 

EXERCICES

 

1.

Dans une boîte de dialogue, demander à l’utilisateur de saisir la longueur du côté du carré à dessiner. Si elle est inférieure à 50, dessiner un carré rouge de la taille correspondante. Sinon, dessiner un carré vert de la taille indiquée.  

 


2.

Ordonner à la tortue de dessiner un escalier comprenant 10 marches en utilisant une instruction repeat 10:. Dessiner les 5 premières marches en bleu et les marches restantes en rouge (Figure a).
(a)
(b)

Demander à la tortue de dessiner une spirale en utilisant d’abord du vert, ensuite du rouge et, finalement, du noir (Figure b).