Skip to content

Retenir une valeur : la variable

Tu viens de découvrir avec Silent Teacher comment Python retient une valeur, et comment cette valeur peut changer. On va maintenant mettre des mots là-dessus, et s'en servir tout de suite pour dessiner quelque chose qu'on ne savait pas encore faire.

Cours ici, exercices sur Capytale

Cette page est le cours. Les exercices sont sur Capytale.

Un problème qu'on ne sait pas encore résoudre

On sait dessiner un carré : quatre côtés de même longueur. Mais comment dessiner une spirale carrée, dont le côté grandit à chaque tour ?

Avec ce qu'on connaît, on est coincé. forward(longueur) avec une longueur fixe donne toujours des côtés égaux. Pour agrandir, il faudrait écrire à la main forward(10), forward(20), forward(30)… : impossible à mettre dans une boucle, où chaque tour est identique. Il nous manque une valeur capable de changer d'un tour à l'autre. C'est exactement ce que Silent Teacher t'a fait observer.

Dans notre langage inventé : le mot mémoire

Reprenons notre langage (droite, répète, repeter_droite…). On lui ajoute une construction pour retenir une valeur sous un nom : mémoire NOM = valeur. Comme pour définir, deux gestes bien distincts.

1. Écrire dans la mémoire, c'est ranger une valeur sous un nom :

mémoire largeur = 3

Ça ne dessine rien : ça crée une mémoire nommée largeur qui contient 3.

2. Lire la mémoire, c'est employer ce nom à la place d'un nombre :

mémoire largeur = 3
repeter_droite(largeur)

Partout où largeur apparaît, le langage le remplace par la valeur rangée (3).

Étape Ce qu'on écrit Effet
Écrire mémoire NOM = valeur Rien ne se dessine : range valeur sous le nom NOM
Lire NOM, à la place d'un nombre Remplacé par la valeur actuellement rangée sous NOM

Une mémoire, c'est une boîte étiquetée. Le point important : on peut réécrire dedans, et la nouvelle valeur remplace l'ancienne, qui est perdue.

mémoire largeur = 3
mémoire largeur = 5

Après ces deux lignes, largeur vaut 5 : le 3 est écrasé. Le signe ici n'est pas un « égal » des maths ; il veut dire « range la valeur de droite dans la boîte de gauche ».

Ça permet un geste très utile : faire grandir une valeur, en rangeant dans la boîte son ancien contenu augmenté.

mémoire largeur = 1
mémoire largeur = largeur + 1

La deuxième ligne se lit : « range dans largeur la valeur de largeur, plus 1 ». On lit d'abord largeur (1), on ajoute 1 (2), et on réécrit le résultat dans largeur. Désormais largeur vaut 2.

Dans une boucle, ce geste trace un escalier dont les marches s'allongent (les mots repeter_droite et repeter_bas sont ceux de la page des fonctions) :

mémoire largeur = 1
répète 4 fois :
    repeter_droite(largeur)
    repeter_bas(1)
    mémoire largeur = largeur + 1

Exercice - Lire

Que vaut taille à la fin de ce programme ? (rien n'est dessiné, on suit juste la mémoire.)

mémoire taille = 10
mémoire taille = taille + 5
mémoire taille = taille + 5
Correction

20. Départ à 10, puis +5 (15), puis +5 (20). Chaque ligne lit l'ancienne valeur, ajoute 5, et réécrit le résultat.

Exercice - Écrire

Trace un escalier de 3 marches, où la première avance de 2 cases, la deuxième de 4, la troisième de 6 (chaque marche : avancer à droite, puis descendre d'une case). Utilise une mémoire qui grandit, sans écrire 2, 4, 6 à la main.

Correction

mémoire largeur = 2
répète 3 fois :
    repeter_droite(largeur)
    repeter_bas(1)
    mémoire largeur = largeur + 2
La mémoire part de 2 et grandit de 2 à chaque tour : 2, puis 4, puis 6.

Le même mot, en Python : la variable

Rien de magique là non plus : Python a le même geste, mais le mot n'est pas mémoire, c'est le signe =. On dit qu'on affecte une valeur à une variable.

largeur = 3
hortense.forward(largeur)
  • largeur = 3 écrit dans la mémoire : crée la variable largeur avec la valeur 3. Rien ne se dessine.
  • hortense.forward(largeur) lit la variable : Python remplace largeur par 3.

Comme avec mémoire, réécrire remplace :

a = 4
a = 6
print(a)   # affiche 6

Le 4 est écrasé. Le = ne veut pas dire « égal » comme en maths ; il veut dire « range la valeur de droite dans la variable de gauche ». D'où le geste pour faire grandir une variable :

score = 10
score = score + 5   # score vaut maintenant 15

Et voici enfin la spirale qu'on ne savait pas dessiner : une variable longueur qu'on agrandit à chaque tour de boucle.

from turtle import Turtle, done
hortense = Turtle()

longueur = 10
for _ in range(20):
    hortense.forward(longueur)
    hortense.left(90)
    longueur = longueur + 10
done()

À chaque tour : la tortue avance de longueur, tourne d'un quart de tour, puis longueur grandit de 10. Le tour suivant trace un côté plus long : c'est ce qui creuse la spirale. Sans variable, impossible.

Le nom, c'est toi qui choisis

Le nom d'une variable, c'est le programmeur qui le choisit : Python s'en moque. Ces deux programmes font exactement la même chose :

longueur = 10
x = 10

Mais longueur se relit tout seul ; x, non : dans six mois, tu ne sauras plus ce que x contenait. Tu es libre du nom, mais choisis un nom parlant : il dit ce qu'il y a dans la boîte.

Une variable, tu en avais déjà croisé une

Souviens-toi : à la page des fonctions, on disait qu'un paramètre (t, longueur…) se comporte comme une valeur nommée. C'était déjà une variable, mais un cas particulier : celle que Python remplit automatiquement, avec la valeur donnée à l'appel. La nouveauté ici, c'est que tu peux en créer toi-même, et écrire dedans quand tu veux, autant de fois que tu veux.

Ce qu'on retient

  • Une variable est une boîte en mémoire, étiquetée par un nom, où l'on retient une valeur pour la réutiliser ou la faire changer. C'est l'équivalent Python du mémoire de notre langage inventé.
  • Écrire (largeur = 3) ne dessine rien : ça range une valeur sous un nom. Lire (largeur), c'est utiliser ce nom à la place de sa valeur.
  • Le = range, il ne signifie pas « égal » : une nouvelle valeur écrase l'ancienne. D'où score = score + 5 pour faire grandir une variable.
  • Le nom est libre, mais on le choisit parlant.
  • Un paramètre de fonction est une variable particulière, remplie automatiquement à l'appel.
  • Le cours est ici ; on s'entraîne sur Capytale.