Aller au contenu

Variable, affectation, type

Syntaxe d'un langage

Il existe de très nombreux langages de programmation. Par exemple: Python, Java, JavaScript, C, C++, C#, LISP, Scheme, Prolog, OCaml, Go (vous devez être capables d'en citer quelques-uns).

Un langage de programmation utilise une syntaxe. La syntaxe dans une langue, comme le français, fait référence aux règles qui régissent la manière dont les mots se combinent pour former des phrases (par exemple, le modèle très simple "sujet verbe complément").

Une phrase en programmation se nomme une instruction. La syntaxe d'un langage de programmation est donc essentiellement constituée des règles définissant la façon dont on doit agencer les symboles, les mots autorisés dans ce langage pour écrire les instructions. Les syntaxes ne sont pas les mêmes dans les différents langages de programmation.

Affectation d'une variable

La syntaxe étant différente suivant les langages de programmation, on utilisera une notation que l'on nommera pseudocode (indépendante du langage utilisé) en plus de la syntaxe du langage Python.

Pour l'instruction d'affectation:

  • En pseudocode, on écrira a ← 3
  • En langage python, on écrit a = 3.

On dira que l'on a affecté la valeur 3 à la variable a. Après cette affectation, on peut dire que l'identifiant a désigne la valeur 3.

Remarque. Dans certains langages de programmation, on utilise <- pour l'affectation, dans d'autres on utlise :=, dans d'autres (comme Python ou JavaScript), on utilise =.

Important

Le nom a que l'on a donné à la variable est appelé un identifiant.
Un identifiant est donc une sorte d'étiquette attribuée à une valeur.
Un identifiant est constitué de lettres et de chiffres, éventuellement du symbole _ (underscore).
L'identifiant ne doit pas commencer par un chiffre.

Exercice

Sur la calculatrice NumWorks, ouvrir l'application Python, ouvrir la console d'exécution.

1) Que doit-on écrire après les chevrons >>> pour effectuer l'affectation a ← 1+2 ?
2) A la ligne suivante, entrer seulement a. Qu'obtient-on ?
3) Quelle valeur est identifiée a (étiquetée a) ?

Solution

1) On écrit a = 1+2.
2) On obtient l'affichage du résultat de l'addition précédente.

écran

3) L'étiquette a désigne la valeur 3.

Exercice

1) Après le pseudocode

a ← 42
a ← a + 8

quelle valeur est étiquetée a ? Expliquer.

Solution

L'étiquette adésigne la valeur 50.

Explication:

  • On commence par l'affectation a ← 42. L'état des variables est le suivant:

écran

  • Puis on exécute l'affectation a ← a + 8. Pour cela, on commence par l'opération qui se trouve à droite du symbole d'affectation. On effectue donc la somme 42+8, ce qui donne 50. Enfin, on attribue l'étiquette a à l'objet de valeur 50:

écran

(En conséquence, l'objet de valeur 42 a perdu son étiquette).

2) Traduire les deux affectations en langage Python.

Solution

a = 42 puis a = a + 8.

3) Entrer votre traduction dans la console d'exécution de l'application Python de la calculatrice NumWorks.

Solution

Dans la console:

>>> a = 42
>>> a = a + 8

4) Que doit-on entrer en ligne suivante pour vérifier quelle est la valeur étiquetée a ?

Solution

On entre a:

>>> a
50

Dans la console python, lorsqu'on entre un nom de variable seul, python affiche la valeur étiquetée par ce nom en ligne suivante.

écran

On retiendra:

  • Une affectation se lit toujours en commençant par lire ce qui est à droite du symbole d'affectation.
  • Dans la console python, lorsqu'on entre un nom de variable seul, python affiche la valeur étiquetée par ce nom en ligne suivante.

Types

En programmation, on utilise des valeurs ayant différents types.

  • Par exemple 42 est de type entier. En python, ce type est nommé int (abréviation de integer, signifiant entier).
  • Nous utiliserons dans la suite également des valeurs de type chaîne de caractères. Le type chaîne de caractères est nommé str en langage python (abréviation de string que l'on peut traduire par chaîne).

Une chaîne de caractères est une suite de symboles, par exemple un mot.

Affectation de la chaîne "coucou" à la variable a:

  • en pseudocode: a ← "coucou"
  • en python: a = "coucou" ou encore a = 'coucou'

Attention

Lorsqu'on écrit coucou sans les guillemets, coucou est alors le nom d'une variable. Lorsqu'on écrit avec les délimiteurs ", coucou est alors un objet de type chaîne de caractères.

Exercice

1) Dans l'écriture python suivante, clarifier la nature du coucou inscrit à gauche et de celui inscrit à droite du symbole d'affectation.

coucou = "coucou"
Solution

A gauche: coucou est un identifiant, nom d'une variable. A droite, il s'agit d'une chaîne (on le voit avec les délimiteurs ").

On peut représenter cette première affectation par le fait de poser une étiquette coucou (qu'on symbolise ici par un petit nuage) sur l'objet de valeur "coucou" (qu'on symbolise par une boîte contenant "coucou"):

boite 1

Le coucou étiquette (nuage) est le nom d'une variable, un identifiant (c'est le coucou qui se trouve à gauche du symbole d'affectation). Le "coucou" dans la boîte est une chaîne de caractères (c'est le "coucou" qui se trouve à droite du symbole d'affectation).

2) Après le code python suivant, quels identifiants désignent la chaîne "coucou" ?

>>> bah = "coucou"
>>> coucou = "bah"
>>> zou = bah
>>> ah = coucou
Solution

Les identifiants bah et zou désignent la chaîne "coucou".

Détaillons:

Après l'affectation bah = "coucou", l'état des variables est le suivant:

état 1

Après l'affectation coucou = "bah", l'état des variables est le suivant:

état 2

Après l'affectation zou = bah, l'état des variables est le suivant:

état 3

En effet, lorsque l'affectation est du type identifiant2 = identifiant1, l'identifiant2 désigne le même objet que l'objet désigné par identifiant1.

Enfin après l'affectation ah = coucou, l'état des variables est le suivant:

état 4

3) Le code python ci-dessous est-il correct ?

"coucou" = coucou
Solution

Non. On ne peut pas affecter une valeur à une chaîne. De même, on ne pourrait pas affecter une valeur à un entier. A gauche d'une affectation, on trouve nécessairement un identifiant.

Important

Si l'on écrit une affectation b = a où on trouve un identifiant à gauche et un identifiant à droite, l'identifiant de droite (ici a) doit déjà désigner une valeur avant cette affectation.

Après une affectation b = a où l'on trouve un identifiant à gauche et un identifiant à droite, l'identifiant de gauche (ici b) désigne le même objet que l'identifiant de droite.

deux étiquettes sur une boîte

Important

A gauche d'un symbole d'affectation, on trouve nécessairement un identifiant, jamais la valeur d'un objet (en particulier à gauche du symbole d'affectation, on n'a jamais un entier, jamais une chaîne de caractères).

Exercice

1) On exécute l'instruction python a = 12. Quel est le type de la valeur étiquetée a ?

Solution

Le type de la valeur 12 est int (entier).

En console:

>>> a = 12
>>> type(a)
<class 'int'>

(retenez simplement que le type est 'int', nous n'expliquerons pas ce que signifie le mot class en SNT).

2) On exécute l'instruction python a = "12". Quel est le type de la valeur étiquetée a ?

Solution

Le type de la valeur "12" est str (chaîne de caractères).

En console:

>>> a = "12"
>>> type(a)
<class 'str'>

3) Pour chacune des deux affectations, vérifier le type dans la console python avec l'instruction type(a).

Solution
>>> a = 12
>>> type(a)
<class 'int'>
>>> a = "12"
>>> type(a)
<class 'str'>

Exercice

Pourquoi distinguer 12 et '12' ?

1) Dans la console python, entrer 12 + 4. Quel résultat obtient-on ?

Solution

Il s'agit de l'addition de deux entiers. Le résultat est 16.

2) Dans la console python, entrer '12' + '4'. Quel résultat obtient-on ?

Solution

Il s'agit de la concaténation de deux chaînes de caractères. Le résultat est "124".

3) Dans la console python, entrer '12' + 4. Quel résultat obtient-on ?

Solution

On cherche à additionner un int et un str. Cela n'a pas de sens. On déclenche une erreur.

A retenir

En langage Python, l'opérateur + n'a pas la même définition selon le type des valeurs auxquelles on l'applique.

  • + entre deux entiers est l'addition usuelle des entiers.
  • + entre deux chaînes de caractères est la concaténation (on "colle" bout à bout la première chaîne et la seconde chaîne pour n'en former qu'une seule).

Exercice

1) Quelle est la valeur désignée par a après les instructions suivantes:

a ← "coucou" 
b ← " les loulous"
a ← a + b
Solution

Rappel: une affectation se lit toujours en commençant par lire ce qui est à droite du symbole d'affectation.

  • Après l'affectation
a ← "coucou" 

l'étiquette a désigne l'objet de valeur "coucou" (de type chaîne de caractères).

  • Après l'affectation

b ← " les loulous"
l'étiquette a désigne toujours le même objet.

  • Après l'affectation
a ← a + b

Avec l'opéraion a + b, on effectue la concaténation des chaînes "coucou" et " les loulous". L'étiquette a désigne donc l'objet de valeur "coucou les loulous".

2) Traduire en python.

Solution

En python:

>>> a = "coucou"
>>> b = " les loulous"
>>> a = a + b

console

3) Tester dans la console.

Exercice

1) Quelle sera la valeur étiquetée a après chacune des affectations suivantes:

a ← "blu"
a ← a + a
a ← a + a
a ← a + a
Solution

1)

  • Après
a ← "blu"

a désigne la chaîne "blu".

  • Après
a ← a + a

a désigne la chaîne "blublu"

  • Après
a ← a + a

a désigne la chaîne "blublublublu"

  • Après
a ← a + a

a désigne la chaîne "blublublublublublublublu".

2) Quelle sera la valeur étiquetée a après chacune des affectations suivantes:

a ← 'b'
a ← a + 'a'
a ← 'a' + a
a ← a + a
a ← 'a' + 'a'
Solution
a ← 'b'   # a désigne la valeur  'b'
a ← a + 'a'   # a désigne la valeur  'ba'
a ← 'a' + a # a désigne la valeur  'aba'
a ← a + a  # a désigne la valeur  'abaaba'
a ← 'a' + 'a' # a désigne la valeur  'aa'

3) Traduire en python.
4) Tester dans la console.
5) Donner de même la valeur étiquetée a après chaque affectation:

a ← "bli"
b ← a + a + a
a ← b + b
a ← a + b
Solution
a ← "bli"   # a désigne la valeur "bli"
b ← a + a + a # b désigne la valeur "bliblibli"
a ← b + b  # a désigne la valeur "blibliblibliblibli"
a ← a + b  # a désigne la valeur "bliblibliblibliblibliblibli"

6) Quelle sera la valeur étiquetée a après chacune des affectations suivantes:

a ← 3
a ← a + a
a ← a + a
a ← a + a
Solution
a ← 3   # a désigne la valeur 3
a ← a + a # a désigne la valeur 6
a ← a + a  # a désigne la valeur 12
a ← a + a # a désigne la valeur 24

Exercice

1) Dans la console python, entrer c = c+c.
2) Qu'obtient-on ?
3) Interpréter le message obtenu.

Solution

On obtient une erreur: on ne peut ajouter c avec c alors que c ne désigne aucune valeur.

A retenir

Le nom d'une variable ne peut jamais se trouver à droite d'une affectation si ce nom ne désigne pas déjà auparavant une valeur.

Exercice

Quelles sont les valeurs identifiées par les noms a et b après les lignes de pseudocode suivantes :

a ← 3
b ← 4
c ← a
a ← b
b ← c
Solution

Les valeurs désignées par a et b ont été échangées:

affectation a b c
a ← 3 3
b ← 4 3 4
c ← a 3 4 3
a ← b 4 4 3
b ← c 4 3 3

Exercice

Quelles sont les valeurs identifiées par les noms a et b après les lignes de pseudocode suivantes :

a ← 3
b ← 4
a ← a+b
b ← a-b
a ← a-b
Solution

Les valeurs désignées par a et b ont été échangées:

affectation a b
a ← 3 3
b ← 4 3 4
a ← a+b 7 4
b ← a-b 7 3
a ← a-b 4 3