Variables et affectations#
Dans la feuille précédente, nous avons effectué des calculs et observé les résultats (type, valeur). Pour écrire des programmes, nous aurons besoin de mémoriser les résultats intermédiaires dans des variables pour en réutiliser les valeurs.
Exercice
En utilisant une expression comme dans la feuille précédente, calculez l” énergie cinétique (kinetic energy) \(\frac12 m v^2\) d’un objet de masse \(14,5\) kg allant à \(100\) m/s:
### BEGIN SOLUTION
1. / 2 * 14.5 * 100**2
### END SOLUTION
72500.0
### BEGIN SOLUTION
1. / 2 * 14.5 * 10**2
### END SOLUTION
725.0
### BEGIN SOLUTION
1. / 2 * 14.5 * 1000 * 1000
### END SOLUTION
7250000.0
Réponse
Vous avez probablement dû réécrire plusieurs fois la valeur de la masse et de la vitesse. Pour éviter cela, on souhaiterait mémoriser ces valeurs pour pouvoir les réutiliser.
Les variables#
Lorsque l’on programme, il est souvent nécessaire de mémoriser une valeur, afin de pouvoir la réutiliser plus tard : un nombre, un nom d’utilisateur, des tickets d’avion encore disponibles, le jour de la semaine, un inventaire, etc. Pour cela on peut lui donner un nom en utilisant une variable.
Par exemple, dans la cellule suivante, nous utilisons deux variables
v
et m
pour nommer la valeur de la masse et de la vitesse de
l’objet, puis nous utilisons ces noms pour calculer son énergie cinétique :
m = 14.5
v = 1000
1. / 2 * m * v**2
7250000.0
Réutilisez la cellule précédente pour calculer l’énergie cinétique selon que la vitesse de l’objet est de \(1\), \(10\), \(100\), ou \(1000\) m/s.
Remarque
Avec des variables, non seulement il n’a plus été nécessaire d’écrire la même valeur plusieurs fois, mais l’expression gagne en lisibilité en utilisant des notations proches de la formule de physique.
Définition : Variables
Une variable (variable) en Python est constituée de deux éléments : son nom ou identificateur (identifier) et sa valeur actuelle. Elle peut être pensée comme une étiquette que l’on peut attacher à une valeur à l’aide d’une affectation.
Définition : Affectation
Syntaxe
identificateur = expression
Sémantique
Calcule (ou évalue) la valeur de l’expression.
Attache cette valeur à la variable dont le nom est donné par l’identificateur.
Conserve ensuite la valeur en mémoire tant que la variable existe et n’a pas été réaffectée.
Exemple
Après l’affectation a = 1
, la valeur 1 a une étiquette a
:

Lors de la nouvelle affectation a = 3 - 1
, tout d’abord une nouvelle valeur 2
est créée:


puis l’étiquette a
est rattachée sur cette nouvelle valeur:


Notez que la valeur 1
d’origine n’a plus d’étiquette a
, et n’est donc plus accessible depuis cette étiquette.
L’affectation b = a
aura alors pour effet d’attacher une nouvelle étiquette à la valeur 2
:

Voir aussi
Référence La métaphore des étiquettes et les images ci-dessus sont tirées de Code like a Pythonista: Idiomatic Python de David Goodger.
La première affectation à une variable s’appelle aussi son
initialisation (initialisation). Tant qu’une variable n’a pas été initialisée, elle ne peux pas être utilisée car elle n’existe pas. Ainsi, si l’on exécute la cellule suivante, une erreur est déclenchée indiquant que la variable c
n’est pas définie :
c
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[5], line 1
----> 1 c
NameError: name 'c' is not defined
Exemple
Affectons la valeur 3
à la variable a
.
a = 3
On peut maintenant réutiliser cette valeur, seule ou dans toute expression :
a
3
a + 1
4
a + a + a
9
On peut aussi modifier la valeur de a
:
a = 5
a
5
a = a + 1
a
6
Que se passe-t-il si l’on exécute à nouveau la dernière cellule? Si on exécute alternativement les deux dernières cellules?
Indication
Remarque sur Jupyter L’ordre dans lequel vous exécutez les cellules est important, la variable contient la dernière valeur que vous lui avez affectée. L’ordre d’exécution des cellules est indiqué entre crochets dans la marge de gauche.
Exercice
La cellule suivante déclare les variables pi
et r
. Utilisez-les pour calculer l’aire et le périmètre d’un
disque de rayon r
pour les différentes valeurs données
ci-dessous. Pour simplifier, vous pourrez considérer que la variable
pi
contient la valeur exacte du nombre bien connu. Utilisez les
cellules vides pour faire vos calculs. N’oubliez pas d’exécuter
aussi les cellules qui changent la valeur de r
.
pi = 3.1415
r = 5
Aire :
### BEGIN SOLUTION
pi * r * r
### END SOLUTION
78.53750000000001
Périmètre :
### BEGIN SOLUTION
2 * pi * r
### END SOLUTION
31.415000000000003
r = 2.5
Aire :
### BEGIN SOLUTION
pi * r * r
### END SOLUTION
19.634375000000002
Périmètre :
### BEGIN SOLUTION
2 * pi * r
### END SOLUTION
15.707500000000001
r = 10
Aire :
### BEGIN SOLUTION
pi * r * r
### END SOLUTION
314.15000000000003
Périmètre :
### BEGIN SOLUTION
2 * pi * r
### END SOLUTION
62.830000000000005
Astuce
Indication
Imaginez que vous tenez une pomme dans la main gauche et une orange dans la main droite. Comment feriez vous pour les échanger?
# Ne pas changer les deux lignes suivantes
b = 5
c = 8
### BEGIN SOLUTION
temp = b
b = c
c = temp
### END SOLUTION
b # doit afficher 8 (ancienne valeur de c)
8
c # doit afficher 5 (ancienne valeur de b)
5
### BEGIN HIDDEN TESTS
assert( b == 8 )
assert( c == 5 )
### END HIDDEN TESTS
Indication
Aparté : Les commentaires en python
En Python, le symbole #
(dièse) marque le début d’un
commentaire (comment). Ce caractère ainsi que toute la suite de
la ligne qui le contient est alors ignoré quand le programme est
exécuté. Par exemple, dans la cellule précédente, le texte # doit afficher 5 (ancienne valeur de b)
ne sera pas pris en compte dans
l’exécution du programme.
Les commentaires sont des notes du programmeur qui apportent des informations complémentaires pour le lecteur.
Quelques raccourcis pratiques
Syntaxe |
Sémantique |
Syntaxe équivalente |
---|---|---|
|
Incrémenter |
|
|
Décrémenter |
|
|
Multiplier |
|
|
Diviser |
|
Conclusion#
Dans cette feuille, nous avons introduit la notion de variable pour mémoriser des valeurs afin de les réutiliser ultérieurement, ainsi que pour améliorer la lisibilité des programmes. Il nous reste à pointer deux points d’attention. D’une part, il convient de ne pas confondre affectation et égalité, qui ont des syntaxes proches, mais des sémantiques très différentes.
Attention
Affectation et égalité : deux concepts différents
L’affectation
x = 5
est une instruction modifiant l’état de la mémoire.Le test d’égalité
x == 5
est une expression booléenne (valeur vrai ou faux) dont la valeur est «x
est égal à5
? ». Autrement dit : est-ce que la valeur contenue dans la variablex
est égale à5
?
D’autre part, si vous avez déjà programmé dans d’autres langages que Python, la sémantique des variables y était peut-être différente.
Astuce
Aparté : Les variables dans d’autres langages de programmation.
De nombreux langages de programmation (comme C++ par exemple) suivent
un modèle différent pour les variables : ces dernières peuvent être
pensées comme des boîtes contenant une valeur. Ainsi, après l’affectation
a=1
, la boîte a
contient l’entier 1 :

Affecter une autre valeur à la même variable, comme avec a = 3 - 1
, remplace le contenu de la
boîte :

L’affectation b = a
a alors pour effet de copier la valeur 2
dans la boîte b
:

