Python Variables

Identification

Infoforall

4 - Les variables dans Python


Nous allons voir comment stocker des informations pour les réutiliser ensuite sans avoir à les récrire.

Nous allons pouvoir placer des résultats dans des sortes de boîtes :

calcul bizarre
Image issue de http://hcc-cs.weebly.com/variables.html

Cette image est une première approche, dans quelques activités, nous verrons le système qui se cache réellement derrière les variables de Python.

Les notions de int, float et string vont nécessairement refaire surface.

Logiciel nécessaire pour l'activité : Thonny

Evaluation ✎ : questions 11-12-13-14-15-16

Documents de cours : open document ou pdf

Résumé : Version HTML ou fond blanc ou ou PDF (couleur ou gris)

1 - Visualisation des variables avec Thonny

Comment parvenir à enregistrer des données ? La réponse est simple : on les place dans une variable.

Dans un premier temps; voyez une variable comme une zone de stockage accessible en connaissant le nom de la zone.

01° Dans Thonny, sélectionner le menu AFFICHAGE-VIEW et y prendre l'option VARIABLES. Vous devriez voir un panneau s'afficher sur la droite.

02° Taper la commande ci-dessous dans la console de Thonny. La console affiche-t-elle quelque chose ? Voyez-vous apparaître quelque chose dans le panneau de droite ?

>>> 5 5
>>> 7 + 2 9

...CORRECTION...

L'interpréteur Python évalue  5  et  7 + 2  et il affiche les résultats. Pourquoi ?

La console ou le shell est la destination par défaut de l'évaluation d'une expression : si on ne lui indique pas ce qu'il doit faire de la réponse, on la dirige vers la console.

Rien n'apparaît dans le panneau de droite : aucune variable n'est créée spontanément.

03° Taper la commande ci-dessous dans la console de Thonny. La console affiche-t-elle quelque chose ? Que voyez-vous apparaître dans le panneau de droite ?

>>> a = 5 >>> b = 7 + 2

...CORRECTION...

La console évalue  5  et  7 + 2  mais ne les affiche pas. Pourquoi ?

Cette fois, on lui demande de faire quelque chose de l'expression : le signe  =  veut dire de placer le résultat dans la variable placée devant le signe égal.

Ici, on place donc les résultats 5 et 9 dans des variables plutôt que de les envoyer à l'affichage.

De plus, on voit apparaître les deux variables dans le panneau de droite : cette fois, on a bien rangé ces deux valeurs en mémoire.

04° Taper les commandes ci-dessous dans la console de Thonny. Comment parvient-on à récupérer la valeur stockée dans une variable depuis la console ?

>>> a 5 >>> type(a) <class 'int'> >>> b 9 >>> type(b) <class 'int'>

...CORRECTION...

Une fois qu'une variable a été affectée, on peut récupérer son contenu associé en tapant simplement son nom. Celui-ci correspond alors à un alias permettant d'obtenir le contenu de la zone mémoire corresopndante.

2 - Variable

Déclaration et affectation

Et voilà, vous venez de déclarer (créer) votre première variable a à l'aide d'un = pour affecter 5 dans une case mémoire.

1
a = 5

Attribuer un contenu se nomme une affectation.

En Python, les deux opérations se font en même temps.

On pourra retrouver la valeur en évaluant simplement a.

En Python, la déclaration et l'affectation se fait en même temps puisqu'on ne choisit pas le type de variable. D'autres langages imposent de choisir le type de variable avant de pouvoir y affecter une valeur.

A chaque fois qu'on tapera a dans une expression, l'interpréteur Python remplacera cette variable par ce qui est stocké à l'adresse correspondante.

Version naïve de la variable Python : la boîte

Dans 90% des cas, vous pouvez voir les variables comme le nom d'une boîte contenant quelque chose. Lorsqu'on tape ce nom, Python vous renvoie le contenu de la boîte.

On pourrait ainsi représenter a et b de cette façon :

représentation en boîte

05° Vérifier le bon fonctionnement des expressions suivantes :

>>> a = 5 >>> b = 9 >>> a*2 10 >>> a + b 14

06° Sans taper les lignes de commandes, tenter de trouver le résultat qui sera affiché à l'écran. Vérifier.

>>> a + 2*b >>> (a+2) * b
Incrémentation

Incrémenter veut dire qu'on augmente la valeur associée à la variable en utilisant la valeur actuelle attribuée à cette variable.

Si on incrémente de 1, x passerait de 5 à 6 : on lui attribue 5+1.

Si on incrémente de 10, x passerait de 5 à 15 : on lui attribue 5+10.

Pour incrémenter a de 1, il faut donc

  1. a = a + 1 : évaluer la valeur actuelle de a,
  2. a = a + 1 : évaluer ce que donne cette valeur + 1 et
  3. a = a + 1 : affecter le résultat de cette évaluation à a.
1 2
a = 10 a = a + 1

07° Que vaut a après avoir tout executé ?

>>> a = 20 >>> a = a + 1 >>> a = a + 1 >>> a = a + 1

...CORRECTION...

On part de 20 et on incrémente trois fois de 1. On atteint donc 23.

3 - Type et modification de type

Nous avons vu que nous pouvions faire plusieurs choses avec une variable :

  • Renvoyer la valeur auquelle elle fait référence simplement en tapant son nom
  • Renvoyer le type de grandeur qu'elle stocke (int, float, booléen ou string pour l'instant) : fonction type()

Pour rappel, voici le récapitulatif de ces différents types :

Type de variableNom du type pour PythonCe qu'il peut contenir
Booléen / BooleanboolFalse or True (avec une majuscule)
Entier / IntegerintUn nombre entier comme 12
Nombre réel / FloatfloatUn nombre à virgule comme 12.0 ou 12.5
Chaîne de caractères / StringstrUne chaîne de caractères, c'est-à-dire un mot ou une phrase. On la définit entre deux guillemets ou apostrophes.
"chaîne de caractères"
ou
'autre chaîne de caractères'

Et si nous placions un string dans la variable a ?

>>> a = "5" >>> a*2 '55' >>> type(a) <class 'str'> >>> type(a*2) <class 'str'>

08° Pourquoi obtient-on "55" et pas 10 ?

...CORRECTION...

On crée une variable a qui désigne un STRING "5".

Lorsqu'on demande de multiplier le string par 2, Python va alors simplement comprendre qu'on veut 2 "5" , soit "55" .

Comme vous le voyez, connaitre le type des données est important. Comment savoir à l'avance ce que désigne une variable ? Il faut utiliser la fonction native de Python nommée type().

09° Lancer les instructions suivantes pour vérifier le type de réponse obtenue. Vous remarquerez au passage qu'on n'utilise pas les accents dans les noms de variables.

>>> a = 5 >>> type(a) <class 'int'>
>>> b = "5" >>> type(b) <class 'str'>
>>> c = 5.0 >>> type(c) <class 'float'>

...CORRECTION...

La fonction native type() permet donc d'obtenir le type de la données stockée à l'adresse mémoire pointée par la variable.

Si on stocke 5, on obtient une variable de type int pour integer (nombre entier)

Si on stocke "5", on obtient une variable de type str pour string (chaîne de caractères)

Si on stocke5.0, on obtient une variable de type float car il s'agit d'un nombre à virgule flottante.

Modifier un type de contenu associé à une variable

On peut bien entendu tenter de transformer un type de contenu en un autre. Pour cela, on utilise les fonctions natives suivantes :

  • int() pour tenter de transformer en entier.
  • float() pour tenter de transformer en réel.
  • str() pour tenter de transformer en chaîne de caractères.
  • bool() pour transformer un contenu en booléen (nous verrons cette fonction plus tard)

10° Lancer les instructions suivantes pour comprendre ce que fait la fonction str() :

>>> a = 5 >>> type(a) >>> a*2 >>> b = str(a) >>> type(b) >>> b*2

...CORRECTION...

1e cas : a désigne 5, un integer. b désigne lui la version string de ce contenu : "5".

b désigne "5".

b * 2 est alors évalué à "55"

5 petites remarques à connaitre et à respecter pour finir :

Remarque 1 : vous remarquerez que tous les noms de variables commencent par une minuscule. Respectez cette habitude. Les majuscules, c'est pour autre chose.

Remarque 2 : il existe une liste des noms réservés qu'on ne peut pas utiliser car l'interpréteur Python les utilise déjà comme mots-clés lorsqu'il analyse le texte qu'on lui fournit  :

False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise
LIEN EXTERNE VERS LA DOCUMENTATION PYTHON

Remarque 3 : Les ordinateurs ont suffisamment de mémoire désormais pour créer des variables de plus d'une lettre. Si possible, tenter de donner à vos variables des noms explicites : des noms permettant de savoir au premier coup d'oeil ce qu'elles contiennent. a, b ou c, ce n'est pas forcément explicite.
On n'utilisera d'ailleurs jamais de variable dont le nom est un l (L minuscule) : il est trop difficile à distinguer d'un I (I majuscule) !

Remarque 4 : Python est sensible à la casse : cela veut dire qu'il distingue les minuscules et les majuscules. Les variables toto et toTO désignent donc bien deux variables différentes. Pour ne pas se perdre dans les notations, on propose souvent d'utiliser l'une des conventions ci-dessous pour les variables composées de plusieurs mots :

  • Utiliser des underscores entre les mots
    • concentration_initiale
    • vitesse_voiture
    • debit_entree
  • Utiliser une majuscule pour séparer les mots
    • concentrationInitiale
    • vitesseVoiture
    • debitEntree

Remarque 5 : Comme l'affectation est importante puisqu'elle modifie l'ID associé à la variable, elles apparaissent en gras dans les codes de ce site.

Déclarer, affecter, intialiser

Nous allons cette année travailler avec Python, et vous devez donc d'avoir connaître son utilisation. Mais sachez que tous les langages de programmation ne sont pas aussi souple.

En C, on peut par exemple, commencer par déclarer une variable (ligne 1) : on signale le type de contenu qu'il pourra contenir.

déclaration affectation
int a; a = 5;

On peut alors en ligne 2 affecter un contenu à cette variable.

En Python, on ne sépare pas réellement les deux étapes. On peut alors parler d'initalisation de la variable : on fait les deux phases "en même temps".

On peut égalemnet le faire en C mais on devra néanmoins encore signaler le type de la variable.

initialisation
int a = 5;

4 - Quelques exercices

✎ 11° Sans taper les lignes de commandes, tenter de trouver la valeur finale qui sera attribuée à b sur la dernière ligne. Justifier votre avis. Vérifier.

>>> a = 10 >>> b = 2 * a >>> b

✎ 12° Sans taper les lignes de commandes, tenter de trouver la valeur finale qui sera attribuée à b sur la dernière ligne. Justifier votre avis. Vérifier.

>>> a = 10 >>> b = 2 * a >>> a = 0 >>> b

✎ 13° Sans taper les lignes de commandes, tenter de trouver la valeur finale qui sera attribuée à b sur la dernière ligne. Justifier votre avis. Vérifier.

>>> a = 10 >>> b = a >>> b = b + 1 >>> b

✎ 14° Sans taper les lignes de commandes, tenter de trouver la valeur finale qui sera attribuée à b sur la dernière ligne. Justifier votre avis. Vérifier.

>>> b = 10 >>> b = b + 1 >>> b = b * 2 >>> b

✎ 15° Sans taper les lignes de commandes, tenter de trouver la valeur finale qui sera attribuée à b sur la dernière ligne. Justifier votre avis. Vérifier.

>>> a = "1" >>> b = "2" >>> b = a + b >>> b = b * 3 >>> b

✎ 16° Sans taper les lignes de commandes, tenter de trouver la valeur finale qui sera attribuée à b sur la dernière ligne. Justifier votre avis. Vérifier.

>>> a = "1" >>> b = "2" >>> b = a + b >>> b = int(b) >>> b = b * 3 >>> b
Pas de retroaction

Il faut bien comprendre qu'on retrouve ici la notion de séquentialité : si une variable est définie à un certain moment à partir du contenu d'une autre variable, la modification ultérieure de cette variable n'aura aucune conséquence !

>>> a = 10 >>> b = a >>> a = 20 >>> b 10

5 - La permutation

REMARQUE

Cette partie sera traitée en classe entière. Vous pouvez la lire ou attendre que nous le fassions ensemble.

Voyons une chose très courante en informatique : la permutation de deux contenus.

Si vous voulez inverser les pièces qui se trouvent dans votre poche droite et dans votre poche gauche, en tant qu'humain, c'est facile puisque vous avez deux mains.

L'ordinateur ne peut faire qu'une chose à la fois. Il va donc devoir utiliser un stockage temporaire d'informations pour parvenir à inverser le contenu de deux variables.

Si vous voulez mettre l’argent argentGauche dans argentDroite et inversement, nous allons devoir utiliser une troisième variable temporaire car l'ordinateur n'a qu'une "main". On pourrait la nommer videPoche.

Inversion en trois étapes
CLIQUEZ SUR L'IMAGE POUR LANCER L'ANIMATION

Cela donne bien trois instructions à réaliser :

  1. videPoche = argentDroite
  2. argentDroite = argentGauche
  3. argentGauche = videPoche

Déroulé étape par étape :

videPoche = argentDroite

Cela permet de créer une variable videPoche et y placer le contenu de la variable argentDroite.

argentDroite = argentGauche

Mettre le contenu de la variable argentGauche dans la variable argentDroite.

  • Mettre le contenu de la variable videPoche (qui contient l’argent initialement à droite) dans argentGauche.
  • argentGauche = videPoche

    17° Permuter les deux variables à l'aide de ces commandes dans la console. A SAVOIR REFAIRE.

    >>> g = 5 >>> d = 55 >>> temp = d >>> d = g >>> g = temp >>> g 55 >>> d 5

    Bref, c’est long et plutôt compliqué puisqu'on a besoin de 3 conteneurs au total.

    Python permet de réaliser la permutation automatiquement. Il suffit de taper une seule ligne.

    a,b = b,a

    18° Tentez de permuter les poches droite et gauche à l’aide de la commande ci-dessus.

    >>> g = 5 >>> d = 55 >>> g,d = d,g >>> g 55 >>> d 5

    En réalité, cette permutation magique d'une ligne va simplement automatiquement créer la permutation à 3 conteneurs. Mais vous n'aurez pas en vous en occuper.

    Permutation en NSI

    Si vous êtes en NSI, nous allons utiliser uniquement la méthode des 3 variables. Pourquoi ?

    Simplement car cet outil de permutation est un spécificité de Python. Beaucoup d'autres langages ne l'implémentent pas.

    Nous écrirons donc plutôt ceci (même si on peut faire plus simple avec une permutation) :

    a = 5 b = 10 temporaire = b b = a a = temporaire

    6 - Affectation multiple

    REMARQUE

    Il s'agit d'une partie de cours qui n'a rien à voir avec les boucles bornées mais je ne savais pas où le mettre sinon...

    Imaginons qu’on désire créer 6 variables a, b, c, d, e et f contenant 3,78. Il faudrait créer 6 lignes de code. On peut faire plus simple avec la ligne suivante :

    a = b = c = d = e = f = 3.78

    7 - FAQ

    On peut détruire une variable ?

    Oui, on peut libérer la place mémoire attribuée à une variable. Pour cela, il faut utiliser le mot-clé del.

    Exemple :

    >>> a = 5 >>> a 5 >>> del a >>> a NameError: name 'a' is not defined

    J'ai vu une notation bizarre : a += 1

    Effectivement, on peut également utiliser une autre notation.

    1 2
    a = 10 a += 1

    Cela donne ici le même résultat que ceci :

    1 2
    a = 10 a = a + 1

    Attention, les deux façons de faire sont équivalentes ici, mais pas toujours. Evitez ces notations pour l'instant. De toutes manières, elles ne seront pas utilisées dans les sujets de NSI. Gardez la méthode n°2. C'est plus long mais c'est moins compliqué à comprendre de toutes manières.

    Nous avons réussi à bien formaliser les choses en utilisant la console interactive. Mais nous ne faisons que taper des instructions qui s'exécutent immédiatement.

    Nous avons vu comment stocker des informations dans des variables.

    Il nous reste à voir comment stocker des instructions : créer un programme. De cette façon, nous n'aurons pas à taper les instructions. Elles seront enregistrées en mémoire.

    Activité publiée le 28 08 2019
    Dernière modification : 17 10 2021
    Auteur : ows. h.