Les variables et l'affectation



Les variables

Les variables servent à conserver temporairement des données en mémoire.

Une variable peut être vue comme une plage mémoire dans une zone de données d'un programme. Elle porte un nom et possède à un instant donné une valeur et un type.

Voici par exemple quatre variables nommées Age, Nom, NombreEnfant et Prenom.

DefVariable.jpg, 41kB

La valeur d'une variable varie lors de l'exécution d'un programme (d'où le nom de variable justement !). La variable NombreEnfant pourra par exemple valoir successivement 2, 0, 3, 1, 0, 4,...

Le type d'une variable dépend du type de valeur qu'elle contient. Par conséquent, une variable sera de type

En Python, le typage des variables est dynamique: cela signifie qu'une même variable peu changer de type au cours de l'exécution d'un programme. La variable Age pourrait par exemple contenir la valeur 58 à un instant t1, puis la valeur "vieux" à un instant t2. A l'instant t1 elle est donc de type numérique, puis à l'instant t2 est devient de type chaine de caractères. Notez que, d'un point de vue pratique, on rencontre rarement des situations où changer le type d'une variable durant l'exécution d'un programme a un intérêt. Si une variable change de type, ce sera donc généralement du à une erreur de programmation.

Les noms de variables en Python

En Python, les noms de variables doivent respecter les règles suivantes:

Règle1: Les seuls caractères autorisés sont les lettres (les accents ne sont pas autorisés), les chiffres et le caractère "_". Il ne peut donc pas y avoir d'espaces dans un nom de variable.

Règle2: Le premier caractère ne peut pas être un chiffre.

Voici quelques exemples et contre-exemples de nom de variables:

Nom Validité
Prénom Non
Nom101 Oui
1er_Prix Non
Prix_En_Euros Oui
Nom_Eleve Oui
Nom Eleve Non
Age-Eleve Non


Attention: le langage Python est sensible à la casse, c'est à dire qu'il distingue les minuscules des majuscules. Nom_Eleve, nom_Eleve, nom_eleve désignent donc trois variables distinctes.

L'affectation

L'affectation est une instruction qui permet de modifier la valeur d'une variable. Plus précisement:

Affecter une valeur à une variable signifie enregistrer cette valeur dans une plage mémoire allouée à cette variable.

Affecter une valeur à une variable modifie donc l'état de la plage mémoire qui lui est allouée, ou autrement dit son "contenu".

Reprenons notre exemple avec les quatre variables Age, NombreEnfant, Nom et Prenom. Supposons qu'à un instant donné l'état de la mémoire soit le suivant:

Mem-Etat0.gif, 5,0kB

Si on affecte ensuite la valeur 33 à la variable Age, on obtient :

Mem-Etat1.gif, 5,1kB

et la plage mémoire allouée à la variable Age restera inchangée jusqu'à ce qu'une valeur différente lui soit affectée.

Ecriture d'une instruction d'affectation en Python

En Python, on représente l'affectation par l'opérateur =. Le nom de la variable figure à gauche du = et la valeur qu'on veut lui affecter, à droite

Par exemple, affecter la valeur 33 à la variable Age s'écrira :

   Age = 33 

De manière générale, ce qui figure à droite du = est une expression. Une affectation s'écrit donc sous la forme:

    Nom de variable = expression 

Une affectation est toujours exécutée de droite à gauche. C'est à dire que l'expression figurant à droite du signe = est d'abord évaluée et que sa valeur est ensuite enregistrée dans la variable dont le nom figure à gauche du =.

Exemple:

   Somme = 1961+58

Dans cette affectation, l'expression 1961+58 est d'abord évaluée. Son résultat (2019) est ensuite affecté à la variable Somme.

Type d'une variable

Le type de l'expression figurant à droite du = défini de manière temporaire le type de la variable.

Exemple:

Notez que la plage mémoire allouée à la variable est redéfinie à chaque affectation et que sa dimension n'est pas toujours la même. Pour comprendre ceci, il faut savoir que les nombres et les chaines de caractères ne sont pas codés de la même manière. En particulier le codage diffère au niveau de la place mémoire occupé. Un nombre sera généralement codé sur 4 ou 8 octets alors que l'espace mémoire occupé par une chaine de caractères dépend de sa longueur (elle peut aisément dépasser 100 octets).

Création d'une variable

La première affectation d'une variable joue un rôle particulier: c'est a ce moment là que l'interpréteur Python va créer la variable. Autrement dit, aucune variable ne peut exister avant la première affectation. Vous obtiendrez donc un message d'erreur si vous tentez d'utilisez une variable qui n'a encore subit aucune affectation.

Expressions contenant des variables

Nous allons à présent étendre la notion d'expression valide vue précédemment en ajoutant la règle suivante:

Le nom d'une variable constitue une expression de même type que cette variable

Cette règle, en conjonction avec les règles déjà définies, implique indirectement qu'une expression peut contenir des nom de variables.

Premier exemple:

 MonAge = 57
 MonAge = MonAge + 1

Dans cet exemple MonAge + 1 est une expression de type numérique, puisque au moment où elle est évaluée, la variable MonAge contient une valeur numérique (57 en l'occurence).

Deuxième exemple:

 MonAge = "Vieux"
 MonAge = "Encore plus " + MonAge

Dans ce deuxième exemple MonAge est une variable de type chaine de caractères. L'expression "Encore plus " + MonAge est donc une expression valide de type chaine de caractères. Sa valeur est "Encore plus vieux".

Troisième exemple:

 MonAge = 58
 Phrase = "J'ai " + MonAge + " ans"

Dans cet exemple, l'expression "J'ai " + MonAge + " ans" n'est pas valide car MonAge est de type numérique.

Conversion de type

Dans certaines situations, il est peut être utile de convertir une expression d'un certain type en une expression d'un autre type. On utilise pour cela les fonctions de conversion de type. Nous en présentons trois ici: str, int et float.

La fonction de conversion str

La fonction str permet de convertir une expression en une chaine de caractères. De manière générale:

Si E est une expression valide alors str(E) est une expression valide de type chaine de caractères.

Voici par exemple une situation ou str est utile:

 MonAge = 58
 Phrase = "J'ai " + str(MonAge) + " ans"

Nous avons en quelque sorte réussi à introduire un nombre dans une chaine de caractères: l'expression en blanc est une expression valide de type chaine de caractères car str(MonAge) est la chaine de caractères "58" et non pas le nombre 58. La valeur de l'expression est donc "J'ai 58 ans".

Les fonctions de conversion int et float

Les fonctions int et float convertissent une expression en un nombre.

En particulier, la fonction int convertit une chaine de caractères en un nombre entier, à condition que cette chaine de caractères soit bien l'écriture d'un nombre entier.

Exemple: int("1961") est le nombre entier 1961. Par contre int("3.14159") provoquera une erreur d'exécution.

La fonction float convertit une chaine de caractères en un nombre, à condition que cette chaine de caractères soit bien l'écriture d'un littéral de type numérique (entier ou non).

Exemple: float("1961") est le nombre 1961 et float("3.14159") est le nombre 3.14150. Par contre float("un million") provoquera une erreur.

Détail technique qui a son importance: le codage binaire du nombre n'est pas le même que pour int. En effet, float n'utilise pas le codage binaire des nombres entier, mais produit un codage en virgule flottante. Donc float("1961") n'est pas identique à int("1961") bien qu'il s'agisse d'un nombre dans les deux cas.

Les fonctions float et int permettent également de traduire un codage numérique en un autre:

Nous verrons un peu plus loin des situations pratiques où float et int sont utiles.

Affectation récursive

Dans une affectation, l'expression affectée à la variable peut elle même contenir la variable. On dit alors que l'affectation est récursive.

Exemple1

Ajouter le prix d'un article au prix total, se traduit par l'affectation récursive suivante:

 PrixTotal = PrixTotal + Prix 
Exemple2 : Incrémentation et décrémentation

Augmenter la valeur d'une variable de 1, se dit incrémenter. C'est un cas particulier d'affectation récursive très fréquement utilisé en programmation.

Par exemple, pour incrémenter le nombre d'articles:

 NombreArticle = NombreArticle + 1 

De même, diminuer la valeur d'une variable de 1 est une affectation récursive appelé décrémentation.

L'instruction suivante par exemple, décrémente le nombre d'articles:

 NombreArticle = NombreArticle - 1 
Raccourci d'écriture en Python

En Python différents opérateurs permettent de raccourcir l'écriture des affectations récursives.

Opérateur Exemple Equivaut à
+= PrixTotal += Prix PrixTotal = PrixTotal + Prix
+= Age += 1 Age = Age + 1
-= PrixTotal -= 100 PrixTotal = PrixTotal - 100
-= Age -= 1 Age = Age - 1
/= PrixTotal /= 2 PrixTotal = PrixTotal / 2
*= PrixTotal *= 2 PrixTotal = PrixTotal * 2