2.6 VARIABLES

 

 

INTRODUCTION

 

Dans le chapitre précèdent, nous avons dessiné des carrés dont la longueur était « codée en dur » dans le programme. Cela rend le programme très peu flexible car il faut le modifier à chaque fois que l’on veut dessiner des carrés de taille différente. Une solution serait de demander à l’utilisateur la taille des carrés à tracer à l’aide d’une boîte de dialogue. Cette solution nécessite cependant de stocker la valeur saisie par l’utilisateur quelque part dans la mémoire de l’ordinateur, dans une sorte de boîte que l’on appelle couramment variable. Une variable est donc une sorte de boîte contenue dans la mémoire RAM de l’ordinateur accessible par son nom. En bref, une variable possède un nom et une valeur. Les règles pour nommer les variables sont les même que pour les fonctions : il ne peut s’agir de mots réservés du langage Python (mots-clés) ni de caractères spéciaux. De plus, le nom d’une variable ne peut pas commencer par un chiffre.


L’instruction a = 2 a pour effet de créer une boîte accessible par le nom a et y stocker la valeur 2. Plus loin, nous verrons que l’on est ainsi en train de définir une variable a et de lui affecter la valeur 2.

 

a = 2:définition de variable (affectation)

Il n’y a de place que pour un seul objet dans la boîte. Ultérieurement, pour insérer la valeur 3 sous le nom a, il faut simplement écrire a = 3 [plus... En Python, les nombres sont également des objets, a est une référence
et une nouvelle affectation à la variable a détruit la variable précédente
et en crée une nouvelle toute fraîche. L’ancien objet, pour autant qu’il
ne soit plus référencé par aucun nom, est détruit par le
ramasse-miettes (Garbage Collector en anglais) intégré à Python
]
 

a = 3: nouvelle affectation

Donc, que se passe-t-il lorsqu’on écrit a = a + 5 ? Python évalue d’abord le côté droit de l’expression, a + 5, ajoutant ainsi 5 à la valeur actuelle contenue dans la variable a, et stocke ensuite le résultat de cette expression, à savoir le nombre entier 8 dans la variable indiquée à gauche du signe =, qui se trouve être la variable a.

De ce fait, le signe d’égalité ne porte pas la même signification en programmation qu’en mathématiques. Il ne définit pas une égalité au sens d’une équation, mais plutôt la définition d’une variable ou l’affectation d’une valeur à une variable [plus...Dans certains langages de programmation, on utilise de ce fait un
symbole différent pour représenter l’affectation, par exemple:= ou MAKE
].

CONCEPTS DE PROGRAMMATION: Définition de variables, affectations

 

 

LIRE ET MODIFIER LE CONTENU D’UNE VARIABLE

 

La boîte de dialogue ci-dessous permet d’affecter une valeur entre 10 et 100 à la Variable x. La boucle qui suit modifie la valeur de cette même variable pour dessiner une spirale.


 

from gturtle import *

makeTurtle()

x = inputInt("Enter a number between 5 and 100")
repeat 10: 
    forward(x) 
    left(120)
    x = x + 20  
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

 

 

MEMENTO

 
Les variables permettent de stocker des valeurs qu’il est possible de lire et de modifier au cours de l’exécution du programme. Toute variable possède un nom et une valeur. On peut définir une variable et lui affecter une valeur à l’aide de symbole égal = [plus... La valeur d’une variable est stockée dans la mémoire RAM de l’ordinateur et est perdue lorsque le programme se termine ou que l’ordinateur est mis hors tension].

 

 

DISTINCTION ENTRE VARIABLES ET PARAMÈTRES

 

Il est crucial de bien saisir la différence entre une variable et un paramètre. Les paramètres servent à “injecter” des données à l’intérieur d’une fonction et ne seront valide qu’à l’intérieur de cette fonction alors qu’il est possible d’utiliser des variables partout dans le programme. Lors de l’appel d’une fonction, on assigne une valeur à chacun des paramètres qui sont alors accessibles dans le corps de la fonction comme des variables. [plus... Un paramètre est un point d’entrée dans la fonction, permettant de lui fournir des données utilisables par les instructions contenues dans son intérieur]

Pour bien expliciter la différence entre les deux, la fonction square() du programme ci-dessous utilise le paramètre sidelength. Lorsque l’on saisit un nombre avec inputInt(), celui-ci est stocké dans la variable s. Lors de l’appel de square(), on passe la valeur de la variable s au paramètre sidelength de la fonction square().

 


 


from gturtle import *

def square(sidelength):    
    repeat 4: 
        forward(sidelength) 
        right(90)
      
makeTurtle()
s = inputInt("Enter the side length")
square(s)
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

 

 

MEMENTO

 

Il faut bien distinguer entre la variable s et le paramètre sidelength. Dans la définition d’une fonction, les paramètres peuvent être considérés comme des valeurs de substitution et sont utilisés comme une variable dont l’existence est limitée à l’intérieur de la fonction.

Ainsi, si l’on appelle la fonction en passant une variable comme paramètre, c’est la valeur contenue dans la variable au moment de l’appel qui est utilisée en guise de paramètre lors de l’exécution de la fonction. De ce fait, square(length) dessine un carré dont la longueur du côté est la valeur contenue dans la variable length [plus... Plus précisément, la valeur de la variable length est copiée dans le paramètre sidelength (pass-by-value)].

 

 

LE MÊME NOM POUR DEUX CHOSES BIEN DISTINCTES

 

Comme nous l’avons déjà vu, le nom donné aux paramètres et aux variables devraient refléter leur but et leur utilisation, mais ils peuvent être choisis librement. Il n’est de ce fait pas rare de choisir exactement le même nom pour une variable et le paramètre d’une fonction. Cela ne pose aucun conflit de nom. Il faut cependant bien distinguer les deux concepts pour être en mesure de comprendre correctement le programme.

 


 


from gturtle import *

def square(sidelength):    
    repeat 4: 
        forward(sidelength) 
        right(90)
      
makeTurtle()
sidelength= inputInt("Enter the side length")
square(sidelength)
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

 

 

MEMENTO

 
Bien qu’il soit possible d’utiliser le même nom pour un paramètre spécifique d’une fonction et une variable dans le programme sans que cela ne pose problème, il est essentiel de bien distinguer les deux sur le plan conceptuel.

 

 

EXERCICES

 

1.

Développer un programme qui demande à l’utilisateur un nombre entier n et qui dessine ensuite un polygone régulier à n côtés avec la tortue. Par exemple, si l’utilisateur saisit le nombre 8, il faut dessiner un polygone régulier à 8 côtés, à savoir un octogone. Le programme doit calculer l’angle de rotation approprié après chaque segment droit. Il peut être utile de se mettre dans la peau de la tortue et réfléchir de combien il faut tourner avant de dessiner le prochain segment droit. Pour information, nous avions déjà tracé des triangles équilatéraux qui sont des polygones réguliers à trois côtés.

 

2.

Développer un programme qui, après avoir demandé à l’utilisateur un angle par l’intermédiaire d’une boîte de dialogue, dessine 30 segments droits de longueur 100 et formant un angle correspondant les uns avec les autres. Tester ensuite le programme avec des angles différents pour essayer de dessiner des motifs sympathiques. Il est possible d’accélérer le dessin en cachant la tortue avec hideTurtle().

 

3.

Demander à la tortue de dessiner 10 carrés. Définir tout d’abord une fonction square prenant le paramètre side_length. Le côté du premier carré mesure 8 et celui des carrés suivants est toujours supérieur de 10 à celui du carré précédent.

 

4.

Lire le côté du plus grand carré depuis une boîte de dialogue. Dessiner ensuite 20 carrés dont le côté du carré suivant diminue toujours d’un facteur 0.9 par rapport au côté du carré précédent.