Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Déclaration de variables et types de données

Commentez vos programmes Manipulation de valeurs entières


Accès rapide :
La vidéo
Le concept de variable
Qu'est-ce qu'une variable ?
Définition de variables
La PEP 8 et les conventions de codage Python
Le concept de type de données
Qu'est-ce qu'un type de données ?
Préciser le type lors de la déclaration d'une variable
Bonne pratique de développement
Travaux pratiques
L'énoncé du TP
La correction

La vidéo

Cette vidéo vous présente quelques bonnes pratiques (PEP8 ...) à respecter lors de la définition de vos variables en Python.


Déclaration de variables et types de données

Le concept de variable

Qu'est-ce qu'une variable ?

Un programme informatique manipule souvent un très grand nombre d'informations. Imaginons, par exemple, un site de vente en ligne : celui-ci va donc devoir gérer les articles en vente sur ce site. Ce site de vente en ligne devrait aussi gérer les commandes de chaque utilisateur. Les articles, les commandes, les utilisateurs manipulés par ce programme sont appelés des données. Ces données sont stockées dans différents emplacements en mémoire.

La mémoire de votre ordinateur contient un très grand nombre de cases mémoire : on appelle chaque case mémoire un octet. D'où le fait qu'on quantifie la taille de la mémoire en Ko (kilooctet, soit 210 octets), en Mo (megaoctet, soit 210 Ko), en Go (gigaoctet, soit 210 Mo) ou encore to (teraoctect, soit 210 Go). Une donnée sera donc stockée dans la mémoire à partir d'un octet particulier et pourra occuper plusieurs octets consécutifs. On appelle une « adresse mémoire » le numéro de la case mémoire (sa position dans la mémoire) à partir de laquelle est stocké une donnée (une information). Il s'agit d'une valeur entière qui, vous le comprenez, peut être très grande.

Si vous utilisiez, avec un langage de programmation de très bas niveau, comme l'assembleur par exemple, vous devriez mémoriser les emplacements mémoire (les adresses mémoire) de chacune de vos données. Vous comprendrez alors aisément que l'exercice risque d'être véritablement compliqué.

C'est pour répondre à cette difficulté que les langages évolués proposent la notion de variable. Une variable est associée à une adresse mémoire, mais ce n'est plus vous qui gérerez cet aspect, ce sera l'environnement d'exécution Python. Une variable possède un nom, ce qui sera beaucoup plus facile à mémoriser et à utiliser. A condition, bien sûr, que vous ayez donné un nom pertinent à votre variable.

Définition de variables

Je vous propose d'utiliser l'interpréteur interactif Python pour essayer de définir quelques premières variables. Pour ce faire, veuillez ouvrir l'interpréteur Python, comme montré dans les chapitres précédents. Retapez les lignes de code suivantes dans votre interpréteur.

>>> counter = 10
>>> message = "Bonjour à vous"
>>> 
>>> print(counter)
10
>>> print(message)
Bonjour à vous
>>>
Exemple de déclarations de variables.

Afin de bien comprendre l'intérêt de chacune de vos variables, il est important de les nommer avec un nom parlant et explicite. Ainsi, la première ligne de l'exemple proposé définit une variable counter contenant la valeur d'un compteur hypothétique. La seconde ligne définie une variable message contenant un message textuel.

Les variables que vous venez de définir existeront jusqu'à la fermeture de l'interpréteur interactif en cours d'exécution. Si vous relancez un nouvel interpréteur, vous n'aurez plus accès à ces variables.

Comme le terme l'indique, une variable ça varie (ça change d'état) au fur et à mesure que le programme s'exécute. Continuez à taper les instructions suivantes.

>>> counter = counter + 1
>>> print(counter)
11
>>> counter += 1
>>> print(counter)
12
>>> message = "Nouveau contenu"
>>> print(message)
Nouveau contenu
>>>
Exemple de modifications des valeurs de vos variables.

La première ligne de ce nouvel exemple, ajoute 1 à la valeur courante de la variable counter. La quatrième ligne en fait de même, mais avec une syntaxe plus compacte. Enfin, la ligne 7 vous montre comment changer la valeur du message.

La PEP 8 et les conventions de codage Python

Il y a quelques règles à respecter pour le choix des noms de vos variables. La plus importante des règles a déjà été énoncée : il faut choisir des noms parlants pour vos variables. Un bon programme doit avant tout être un programme qu'on comprend facilement et donc que l'on pourra faire évoluer facilement : le choix des noms de vos variables est très important de ce point de vue.

Ensuite, sachez que vous pourriez choisir n'importe quelles lettres pour constituer un nom de variable : y compris des lettres non latines. A titre, d'exemple, vous pouvez taper les lignes de code suivantes (copiez les à partir de cet exemple dans votre interpréteur Python).

>>> π = 3.141592654
>>> print(π)
3.141592654
>>> 
Utilisation d'une lettre non latine pour définir une variable.

Cependant, il est conseillé de ne pas le faire : la lettre π n'étant pas disponible sur des claviers non grecs. De même, je ne vous recommande pas d'utiliser un nom de variable avec des caractères accentués. Si vous décidez de partager vos codes en « open source » sur Internet, les personnes ne possédant pas de clavier français auront beaucoup de mal à faire évoluer votre programme.

En conséquence limitez-vous aux lettres ASCII. Vous pouvez aussi utiliser des chiffres et le caractère _ (underscore) dans vos noms de variables. Attention, néanmoins à ne pas utiliser de chiffre en premier caractère d'un nom de variable (par exemple 3x) : ce n'est pas autorisé.

Enfin, le langage Python définit un ensemble de conventions de codage. Certaines d'entre elles portent sur le nommage des éléments de votre programme. Ces conventions sont définies dans ce qu'on appelle la « PEP 8 ». Les plus curieux d'entre vous pourront consulter cette PEP 8 en consultant le lien suivant : https://www.python.org/dev/peps/pep-0008/

il existe de nombreuses autres PEP. Une PEP (Python Enhancement Proposition - Proposition d'amélioration de Python, en français) est un document permettant de spécifier un aspect du langage Python (élément de syntaxe, contenu d'une nouvelle version, ...). Les PEPs sont proposées pas la PSF (Python Software Foundation).

Cette PEP 8, n'est qu'une convention : si vous ne la respectez pas, votre programme fonctionnera tout de même. Mais il est fortement recommandé par les développeurs du langage de la respecter. Par rapport à nos variables, cette PEP indique qu'elles doivent être écrites en minuscules et si un nom de variable contient plusieurs mots alors ils devront être séparés par un caractère underscore. Voici extrait de cette fameuse PEP 8.

Extrait de la PEP 8

En conséquence les noms de variables précédemment proposés sont correctement écrits, au regard de la PEP 8. Par contre, les noms de variables suivants ne sont pas recommandés : Counter, firstValue, MESSAGE.

Certains IDE sont capables de vérifier le respect de ces conventions de codage. C'est notamment le cas de PyCharm, comme le montre cette nouvelle capture d'écran.

Vérification du respect de la PEP 8 par PyCharm
placez la souris sur le soulignement en dessous du nom de la variable pour faire apparaître le message.

Le concept de type de données

Qu'est-ce qu'un type de données ?

Maintenant que nous savons déclarer des variables, il faut qu'on parle de la notion de « type de données ». Le plus simple, pour comprendre cette notion, est de commencer à taper ces quelques lignes dans un interpréteur interactif Python.

>>> counter = 10
>>> type(counter)
<class 'int'>
>>> pi = 3.141592654
>>> type(pi)
<class 'float'>
>>> message = "Hello"
>>> type(message)
<class 'str'>
>>> state = True
>>> type(state)
<class 'bool'>
>>>
Quelques exemples montrant comment trouver le type d'une variable.

Comme vous le constatez, nous créons dans cet exemple quatre variables nommées respectivement counter, pi, message et state. Chacune de ces variables contient une donnée différente et nous cherchons à en afficher son type. On constate l'existence de quatre types de bases en Python : int, float, str et bool.

Plusieurs variables peuvent avoir un même type de données. Un type de données, ou plus simplement un type, définit un ensemble de valeurs possibles pour les variables qui sont basées sur lui. Ainsi, le type int définit l'ensemble des entiers relatifs alors que le type str représente l'ensemble des chaînes de caractères possibles.

De plus, en fonction du type considéré vous pourrait utiliser des opérateurs qui auront un comportement adapté à la nature des éléments manipulés. Tester, toujours dans l'interpréteur interactif, ces quelques lignes de code.

>>> a = 7
>>> b = 3
>>> result = a + b
>>> print(result, type(result))
10 <class 'int'>
>>> 
>>> s1 = "Hello"
>>> s2 = "World"
>>> result = s1 + " " + s2
>>> print(result, type(result))
Hello World <class 'str'>
>>>
Utilisation d'opérateurs sur différents type de données.

La ligne 3 cherche à ajouter deux variables contenant chacune une valeur entière. En conséquence, l'opérateur + effectue une addition et calcule donc la valeur 10 elle-même de type int.

La ligne 9, quant à elle cherche à appliquer l'opérateur + sur des chaînes de caractères. C'est donc tout naturellement une concaténation qui va être jouée ce qui calculera une nouvelle chaîne de caractères.

Du coup, une question légitime se pose peut-être à vous : que se passe-t-il si on utilise l'opérateur + avec une chaîne de caractères et un entier. Le mieux c'est de le tester ensemble.

>>> start_message = "Counter = "
>>> counter = 10
>>> message = start_message + counter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>>
Tentative d'utilisation de l'opérateur + avec une chaîne et un entier.

Mais alors comment obtenir une chaîne de caractères contenant la chaîne passée en premier paramètre avec la valeur numérique à la suite ? La solution consiste à convertir la valeur numérique en une chaîne de caractères et de réaliser la concaténation.

>>> start_message = "Counter = "
>>> counter = 10
>>> message = start_message + str(counter)
>>> print(message)
Counter = 10
>>>
Conversion d'un entier en une chaîne et concaténation du tout.
de même, il est possible de convertir une chaîne de caractères en une valeur entière, à condition, bien entendu, que la chaîne ne comporte que des chiffres.

Préciser le type lors de la déclaration d'une variable

Depuis Python 3.0 il est possible de préciser le type d'une variable lors de sa déclaration. Pour spécifier le type d'une variable, il faut ajouter un : suivit du nom du type entre le nom de la variable et le caractère =. Voici exemple de spécification d'un type sur une déclaration de variable.

>>> counter : int = 10
>>> print(counter)
10
>>> message : str = "Hello World"
>>> print(message)
Hello World
>>>
Exemple de spécification de types lors de la déclaration de variables.
il est clairement indiqué dans les documentations officielles que cette définition vaut simplement pour documentation : aucun test n'est réalisé durant l'exécution du programme pour valider la cohérence de la déclaration. Donc faites attention à ce que vous écrivez. Voici quelques exemples à ne surtout pas reproduire dans vos programmes.
>>> bad_declaration1 : str = 1
>>> print(bad_declaration1)
1
>>> bad_declaration2 : int = "Truc de fou"
>>> print(bad_declaration2)
Truc de fou
>>>
Quelques mauvais exemples de spécification de types.

Bonne pratique de développement

Je vous recommande de spécifier le type de données utilisé par vos variables, du moins tant que celui-ci ne change pas au fil du temps. Cela permettra de considérablement aider à la compréhension quand vous, ou une autre personne, relirez ce code.

Pour appuyer mon propos, notez que l'IDE PyCharm suggère de rajouter l'information de type sur vos déclarations de variables quand cela n'est pas fait.

Suggestion PyCharm pour ajouter une information de type sur une déclaration de variable
pour obtenir cet assistant, cliquez au beau milieu du nom de la variable avec le bouton gauche de la souris puis patientez une ou deux secondes. L'ampoule orange doit apparaître : cliquez dessus puis sélectionner « Add type hint for variable ».

Travaux pratiques

L'énoncé du TP

Comme nous l'avons vu dans les chapitres précédents, la fonction input permet de lire une chaîne de caractères à partir du clavier. Je vous renvoie vers notre documentation sur la fonction imput, pour de plus amples informations.

Veuillez créer un script appelé "addition.py" dans l'IDE (ou l'éditeur) de votre choix. Celui-ci devra demander deux valeurs entières à l'utilisateur et calculer la somme de ces deux valeurs. Le résultat devra être affiché sur la console.

Veuillez jouer le jeu et ne commencez pas par lire la correction suivante. ;-)

La correction

La seule difficulté dans cet exercice réside dans le fait que la fonction input permet de lire des chaînes de caractères à partir du clavier. Or, nous voulons ajouter deux valeurs entières. Des conversions de str vers int sont donc nécessaires. Voici ma correction.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
# On demande à lire notre première valeur
first_string : str = input("Veuillez saisir un entier : ")
# On convertit la chaîne de caractère en un entier
first = int(first_string)

# On  demande à lire la second valeur qu'on convertit immédiatement en entier
second : int = int(input("Veuillez saisir un autre entier : "))

# On réalise la somme des deux valeurs
result : int = first + second

# On affiche le résultat
print(first, "+", second, "=", result)
Programme permettant d'ajouter deux entiers renseignés à partir de la console
la fonction print permet d'afficher plusieurs valeurs simultanément. Dans ce cas, chaque valeur sera séparée par un espace (du moins, par défaut). Vous pouvez consulter notre documentation de la fonction print pour de plus amples informations.

Et voici un exemple d'utilisation de notre programme.

Veuillez saisir un entier : 7
Veuillez saisir un autre entier : 3
7 + 3 = 10


Commentez vos programmes Manipulation de valeurs entières