Chapitre 2 : déclarer une variable et lui affecter une valeur

Plan du chapitre

  1. Définition d’une variable
  2. Les différents types de variables
  3. Le typage dynamique
  4. Déclarer une variable et lui affecter une valeur
  5. Changer le type d’une variable
  6. Le formatage des chaînes de caractères

1. Définition d’une variable

Le travail d’un ordinateur, c’est de manipuler des données qui sont stockées dans sa mémoire. Or, pour cela, il faut un minimum d’organisation. C’est la raison pour laquelle les ordinateurs utilisent des variables, lesquelles correspondent à des adresses mémoire bien précises.

Une variable, c’est donc avant tout une adresse mémoire mais c’est également un endroit que l’on réserve dans la mémoire de l’ordinateur. Lorsqu’on déclare une variable, on créé un petit tiroir sur lequel on colle une étiquette (qui correspond au nom de la variable) et dans lequel on stocke une valeur.

2. Les différents types de variables

Les variables peuvent stocker des données de différents types :

  • des nombres entiers  qui correspondent au type int (integer en anglais)
  • des nombres décimaux qui correspondent au type float.
  • des strings (c’est-à dire des chaînes de caractères en français) qui correspondent au type str.
  • des booléens qui correspondent au type bool.
  • des listes qui correspondent au type list.
  • des tuples qui correspondent au type tuple.
  • des dictionnaires qui correspondent au type dict.

Dans un premier temps, découvrons ensemble les trois premiers types, c’est-à dire les nombres entiers, les nombres décimaux et les chaînes de caractères.

3. Le typage dynamique

Python est un langage dont le typage est dynamique. Cela signifie que c’est l’ordinateur, et non pas le programmeur, qui se charge de « typer » les variables.

Le typage d’une variable consiste à associer à cette dernière un type de donnée, permettant à l’ordinateur de savoir si celle-ci est un nombre entier, un nombre décimal ou une chaîne de caractères. Le typage permet d’allouer des zones de mémoire de dimension suffisante pour stocker cette donnée, et éventuellement de vérifier que les manipulations programmées sur cette variable (opérations mathématiques, traitement de texte, etc.) sont cohérentes avec son type. En effet, il n’est pas possible d’additionner un nombre entier avec une chaîne de caractères.

Dans certains langages, comme le langage C, le programmeur doit typer lui-même la variable au moment de sa déclaration :

int nombre = 13;

En Python, nul besoin de se préoccuper du typage au moment de déclarer une variable. Cependant, pour la bonne exécution du programme, il est parfois nécessaire de modifier en cours de route le type d’une variable. C’est ce que nous allons voir un peu plus loin dans ce chapitre.

4. Déclarer une variable et lui affecter une valeur

Pour déclarer une variable, rien de plus simple, il suffit de lui donner un nom et de lui affecter une valeur. Par exemple, je déclare la variable n et je lui affecte le nombre entier 13 :

n = 13

Vous ne pouvez pas déclarer une variable sans lui affecter de valeur.

n

NameError: name ‘n’ is not defined

Donc, nous avons affecté le nombre entier 13 à la variable n. Dans les entrailles de votre ordinateur, un lutin numérique a collé une étiquette portant la lettre n sur la façade d’un tiroir. Puis, il a ouvert ce dernier et il y a glissé le nombre entier 13. Maintenant, à chaque fois que j’appelle la variable n, le nombre entier 13 apparaît.  Notez bien que le signe = n’est pas un symbole d’égalité arithmétique mais un signe d’affectation, c’est-à dire que si j’ai envie d’affecter une autre valeur à la variable n, je peux le faire comme bon me semble. Tiens, d’ailleurs je le fais :

n = 7

Le langage Python est sensible à la casse, c’est-à dire que n est différent de N. Une variable que vous avez baptisée nombre_7, est différente de la variable Nombre_7. Dans vos noms de variables, vous pouvez utiliser toutes les lettres combinées à tous les chiffres mais vous ne pouvez pas utiliser d’accents ni de caractères spéciaux à l’exception du tiret bas « underscore » : _

En outre, vous ne pouvez pas commencer par un chiffre. Par exemple, 7nombre va vous lever une exception, c’est à dire une erreur, et le programme ne s’exécutera pas.

SyntaxError : invalid syntax

4.1. Les variables de type int et float

Il est tout à fait possible d’effectuer des opérations arithmétiques entre des variables de type int et des variables de type float. Dans ce cas, le résultat obtenu est un nombre décimal.

Je déclare deux variables et je leur affecte deux valeurs différentes :

a = 5
b = 8.7

Notez que pour les nombres décimaux, c’est la notation anglo-saxonne qui s’applique, c’est-à dire que le point remplace la virgule. En programmation, il n’existe pas de nombres à virgule!

Je peux tout aussi bien les déclarer sur la même ligne en les séparant par des virgules :

a, b = 5, 8.7

Je peux également inverser les valeurs de ces deux variables en écrivant :

a, b = b, a

Maintenant, si je fais print(a + b), qu’est-ce qui s’affiche?

print(a + b)

13.7

print() est la fonction qui permet d’afficher le contenu d’une variable ou le résultat d’une expression.

Je peux aussi déclarer une variable comme cela:

c = a * 2

J’appelle c, Quelle est la valeur qui s’affiche?

17.4

Explication

Au départ, la variable a stockait le nombre entier 5. Mais en cours de route, nous avons inversé les valeurs de a et b. a ne stockait plus 5 mais le nombre décimal 8.7. Multiplié par 2, cela nous donne la valeur affectée à c.

Dans ce deuxième exemple, je n’utilise pas la fonction print() et pourtant le résultat s’affiche! C’est tout à fait normal car le terminal interactif Python 3 permet de se passer de print(). Toutefois, je vous invite à utiliser systématiquement print() car dans des programmes plus élaborés, cette fonction est nécessaire pour afficher un résultat en console et dénicher une erreur. Croyez-moi, print() va devenir votre meilleur ami!

4.2. L’incrémentation

Il vous sera aussi très utile d’incrémenter une variable. L’incrémentation est l’opération qui consiste à ajouter 1 (ou une autre valeur entière) à un compteur. Elle est utilisée dans les boucles d’itération, un concept que nous découvrirons dans un chapitre ultérieur.

c = 17.4
c = c + 1

Mais nous pouvons utiliser une autre syntaxe plus concise qui revient exactement au même :

c += 1
print(c)

c = 18.4

La décrémentation est l’opération inverse :

c -= 1
print(c)

c = 17.4

4.3 Les variables de type str

On peut affecter à une variable une chaîne de caractères (string). Pour ce faire, il faut que cette dernière soit entourée de guillemets ou d’apostrophes :

sport = "parachutisme sous-marin"
prenom = 'Jérôme'

Si vous oubliez les guillemets ou les apostrophes, Python va penser que Jérôme est une variable et il va partir à la recherche de cette dernière avant d’afficher cette erreur parce qu’il ne la trouvera pas :

NameError: name ‘Jérôme’ is not defined

Donc, veillez à ne pas oublier les guillemets ou les apostrophes. Comme on le voit dans le deuxième exemple, on ne peut pas utiliser de lettres accentuées dans le nom de la variable (prenom) mais la chaîne de caractères peut contenir n’importe quelle lettre accentuée (« Jérôme ») pourvu que l’encodage soit en utf-8.

Il est possible d’additionner des chaînes de caractères. Cette opération s’appelle la concaténation. Exemple :

phrase = prenom + " aime le " + sport
print(phrase)

Jérôme aime le parachutisme sous-marin

Il existe également une autre possibilité qui affiche le même résultat :

print(prenom, "aime le", sport)

Jérôme aime le parachutisme sous-marin

J’utilise la fonction print() en séparant les arguments par des virgules. Par défaut, la fonction affiche les trois arguments en les séparant par un espace ce qui explique que je n’ai pas rajouté d’espaces autour de la chaîne de caractères « aime le » contrairement au premier exemple ( » aime le « ).

Il est possible de multiplier une chaîne de caractères.

print(prenom * 4)

JérômeJérômeJérômeJérôme

5. Changer le type d’une variable

prenom est une variable qui stocke une chaîne de caractères (Jérôme) tandis que b est une variable qui stocke un nombre entier (5). Pour s’en assurer, il suffit d’utiliser la fonction type() :

print(type(prenom))
class 'str'
print(type(b))
class 'int'

Je déclare une nouvelle variable et je lui affecte la chaîne de caractères « 9 ».

chiffre = "9"

Il ne s’agit pas d’un nombre entier mais bien d’une chaîne de caractères puisque je l’ai entourée de guillemets! Maintenant, essayons d’additionner b + chiffre et voyons ce que cela donne :

print(b + chiffre)

TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’

En clair, cela signifie : « Vous ne pouvez pas additionner un nombre entier  avec une chaîne de caractères! » Il est également impossible d’additionner un nombre décimal avec une chaîne de caractères.

Pour lever cette incompatibilité, la solution est fort simple. Il suffit de changer le type de la variable grâce à la fonction idoine. Dans notre exemple, il nous faut utiliser int().

chiffre = int(chiffre)
print(type(chiffre))
class 'int'
print(b + chiffre)

14

Maintenant, ça fonctionne car les deux variables contiennent des nombres entiers.

6. Le formatage des chaînes de caractères

Pour ce qui est des chaînes de caractère, la méthode format() est très intéressante. Sa mission principale est d’appliquer la méthode str() sur des variables d’un autre type avant de les inclure dans une chaîne de caractères. Déclarons deux variables de type str(), une variable de type int() et une variable de type float(). 

personne_1 = "Amandale"
personne_2 = "Patriste"
age = 46
temperature = 41.5

Nous allons tout d’abord utiliser la méthode que je qualifierais « d’usine à gaz ».

phrase_1 = personne_1 + " a " + str(age) + " ans."
print(phrase_1)

Amandale à 46 ans.

OK, le code fonctionne mais c’est laborieux et il ne faut rien oublier : ni les + pour concaténer, ni les guillemets autour des chaînes de caractères ( » a «  et  » ans. »), ni les espaces autour de  » a «  et avant le  » ans. ». Enfin, il ne faut pas oublier de convertir le type de la variable age qui contient un nombre entier, en chaîne de caractères grâce à str()! Sinon, vous allez avoir droit à une belle erreur. Je vous rappelle qu’il n’est pas possible d’additionner ou de concaténer une variable de type str() avec une variable de type int() ou float(). Bref, bon courage!

Eh bien Mesdames, Messieurs, la méthode format() va se charger de simplifier tout ça! Reprenons notre exemple précédent et formatons la chaîne:

phrase_1 = "{} a {} ans."
phrase_1.format(personne_1, age)
print(phrase_1)

Amandale à 46 ans.

Alors comment est-ce que ça fonctionne? J’écris ma chaîne de caractères tout à fait normalement sauf que je remplace les variables que je veux insérer, par des accolades:


phrase_1 = "{} a {} ans."

J’ai donc déjà une chaîne de caractères entourée par des guillemets, sauf que si j’exécute le programme maintenant, je vais obtenir ceci :

{} a {} ans

Vous en conviendrez. Ça n’a aucun sens! Je vais donc appliquer la méthode format sur la variable phrase_1 :


phrase_1.format(personne_1, age)

Le point entre phrase_1 et format signifie que j’applique la méthode format() sur la variable phrase_1. Cette méthode prend en paramètres le même nombre d’arguments qu’il y a d’accolades. Il y en a deux, donc je lui passe deux arguments qui sont en l’occurrence deux variables. Or, il se trouve que l’une des deux variables est un nombre entier. Eh bien, ce n’est pas bien grave puisque format() va se charger de faire la conversion. La variable personne_1 va s’insérer dans les premières accolades tandis que la variable age va s’insérer dans la deuxième paire d’accolades :

Amandale a 46 ans.

Croyez-moi. Après un petit temps d’adaptation, cette méthode est beaucoup plus simple… Et très pratique. Par exemple, je vais remplacer personne_1 par personne_2 :

phrase_1.format(personne_2, age)

Patriste a 46 ans.

Vous pouvez même appliquer cette méthode non pas sur une variable mais directement sur une chaîne de caractères. Cela vous évite de créer une variable :

"{} a {} ans.".format(personne_2, age)

Patriste a 46 ans.

En cours de rédaction