Nous venons de constater que Python peut servir de calculatrice et que, par conséquent, il manipule des nombres ce qui n'est pas une surprise ! En fait, plus généralement, Python manipule des données. Ces données peuvent être très diverses mais dans la mémoire de l'ordinateur, elles se ramènent toujours à une suite finie de nombres binaires.
Pour pouvoir accéder aux données, le programme utilise des variables de différents types. Une variable apparaît dans un langage de programmation sous un nom de variable à peu près quelconque (voir ci-dessous), mais pour l'ordinateur il s'agit d'une référence désignant une adresse mémoire, c'est-à-dire un emplacement précis dans la mémoire vive.
À cet emplacement est stockée une valeur bien déterminée. C'est la donnée proprement dite, qui est donc stockée sous la forme d'une suite de nombres binaires, mais qui n'est pas nécessairement un nombre pour le langage de programmation utilisé. Cela peut être, en fait, à peu près n'importe quel « objet » susceptible d'être placé dans la mémoire d'un ordinateur.
Par exemple : un nombre entier, un nombre réel, un nombre complexe, un vecteur, une chaîne de caractères typographiques, un tableau, une fonction, une image etc...
Pour distinguer ces divers contenus possibles, le langage de programmation fait usage de différents types de variables (le type entier, le type réel, le type chaîne de caractères, le type liste, etc.). Nous allons expliquer tout cela dans la suite.
Exemple : Lorsqu'on saisit un nombre en Python, l'interpréteur crée un nouvel objet et le garde en mémoire.
>>>165 >>>165, id(165), type(165) (165, 505504048, < class 'int'>)
Cet objet possède une valeur (ici 165), un identifiant (ici 505504048), c'est à dire une « carte d'identité » permettant de savoir où il est gardé en mémoire et enfin un type (ici le type est entier : 'int')
Cet identifiant étant un peu compliqué, on va utiliser les affectations.
Au lieu de désigner 165 par son identifiant, on va lui donner un nom, par exemple a. Ainsi au lieu d'appeler l'objet ''Monsieur 505504048'', on l'appellera ''Monsieur a''. Les termes « affecter une valeur » ou « assigner une valeur » à une variable sont équivalents. Ils désignent l'opération qui permet d'établir un lien entre le nom de la variable et sa valeur (son contenu). En Python comme dans de nombreux autres langages, l'opération d'affectation est représentée par le signe égale « = ».
>>>a=165 >>>> a, id(a), type(a) (165, 505504048, < class 'int'>)
Ici on affecte à la variable a le nombre 165 : Monsieur a, alias Monsieur 505504048.
Remarque : Comme dans la grande majorité des langages de programmation, l'instruction d'affectation « = » n'a pas la même signification qu'en mathématiques. Par exemple, en mathématiques "=" est symétrique alors qu'en programmation il ne l'est pas. En programmation, le symbole « = » se lit, « prend la valeur ».
>>>a=165 >>>> a, id(a), type(a) (165, 505504048, < class 'int'>) >>> b=a*2 >>> b, id(b), type(b) (330, 37405104, < class 'int'>)
On remarque que l'identifiant de l'objet auquel renvoie la variable b n'a plus rien à voir avec b. Ainsi, l'objet nommé b n'a plus aucune relation avec l'objet nommé a. Ainsi une réaffectation ultérieure de la variable a n'entraînera aucun changement pour la variable b.
Les noms de variables sont des noms que vous choisissez comme vous le souhaitez. Il est conseillé de les choisir de préférence assez courts, mais aussi le plus explicite possible, de manière à exprimer clairement ce que la variable est censée contenir.
Par exemple, des noms de variables tels que longueur ou long conviennent mieux que x pour exprimer une longueur. Un bon programmeur doit veiller à ce que ses lignes d'instructions soient faciles à lire. D'ailleurs, c'est l'occasion de rappeler qu'un code doit d'étre commenté.
#Ceci est un commentaire Python
Sous Python, les noms de variables doivent obéir à quelques règles simples :
On prendra l'habitude d'écrire l'essentiel des noms de variables en caractères minuscules (y compris la première lettre). Il s'agit d'une simple convention qui est largement respectée. On n'utilisera les majuscules qu'à l'intérieur même du nom, pour en augmenter éventuellement la lisibilité.
Exemples : nbRacine ; longTableau ; abscisseTortue ;....
En plus de ces règles, il faut encore ajouter que l'on ne peut pas utiliser comme nom de variables les 33 « mots réservés » ci-dessous car ils sont utilisés par le langage lui-même :
and | as | assert | break | class | continue | def |
del | elif | else | except | False | finally | for |
from | global | if | import | in | is | lambda |
None | nonlocal | not | or | pass | raise | return |
True | try | while | with | yield |
Applications : Lisez la suite des instructions suivantes et devinez le contenu de chacune des variables à chaque étape. Pour vérifier, on pourra exécuter chacune de ces instructions dans la console de l'IDLE et vérifier nos résultats.
>>>a=100 >>>b=17 >>>c=a-b >>>a=2 >>>c=b+a >>>a,b,c |
>>>a=3 >>>b=4 >>>c=a >>>a=b >>>b=c >>>a,b,c |
Signalons un raccourci propre à Python très utile en pratique et qui a l'avantage d'éviter la confusion avec la manipulation d'équations en algèbre.
>>>x+=1 #remplace x par x+1 >>>x-=1 #remplace x par x-1 |
>>>x*=3 #remplace x par x*3 >>>x/=2 #remplace x par x/2 |
Dans la console, copiez les trois lignes suivantes.
>>> n = 2 # définir n et lui donner la valeur 2 >>> message = "Bonjour !" # affecter la valeur "Bonjour !" à message >>> pi = 3.14159 # assigner sa valeur à la variable pi # cela n'est pas automatique
Nous disposons donc des trois variables n, message et pi. Vous remarquerez que pour le moment on est obligé de créer une variable pour le nombre \(\pi\).
Pour afficher leur valeur à l'écran, il existe deux possibilités.
La première consiste à entrer au clavier le nom de la variable, puis taper sur « Entrée ». La console Python répond en affichant la valeur correspondante :
>>> n 2 >>> message 'Bonjour !' >>> pi 3.14159
Il s'agit cependant là d'une fonctionnalité de la console, qui est destinée à nous faciliter la vie lorsque nous voulons tester des instructions très simples. À l'intérieur d'un programme, nous utiliserons toujours la fonction print(...)
>>> print(message) Bonjour ! >>> print(n) 2
Sous Python, il n'est pas nécessaire de préciser le type d'une variable avant de pouvoir l'utiliser. Il suffit en effet d'assigner une valeur à un nom de variable pour que celle-ci soit automatiquement créée avec le type qui correspond au mieux à la valeur fournie. Dans ce qui précède, les variables n, message et pi ont été créées automatiquement chacune avec un type différent.
On dira à ce sujet que le typage des variables sous Python est un typage dynamique, par opposition au typage statique utilisé en C++ , en Java ou avec Processing que les élèves utilisent en ICN, ISN et STI2D. Dans ces langages, il faut toujours déclarer le nom et le type des variables, et ensuite seulement leur assigner un contenu, lequel doit bien entendu être compatible avec le type déclaré.
int n ;
Sous Python, on peut assigner une valeur à plusieurs variables simultanément.
>>> x = y = 7 >>> x 7 >>> y 7
On peut aussi effectuer des affectations parallèles à l'aide d'un seul opérateur.
>>> a, b = 4, 8.33 >>> a 4 >>> b 8.33
Attention aux affectations parallèles : Que peut-on prévoir pour les deux suites d'instructions suivantes ?
>>> x=10 >>> x=x+2;y=x*2 >>> x,y |
>>> x=10 >>> x, y = x+2, x*2 >>> x,y |
Remarque : Dans l'exemple de gauche le point virgule de la deuxième ligne sépare deux instructions.
Observons, l'effet des instructions suivantes.
>>> x, y = 1, -1 >>> x>0 and y>0 >>> x>0 and y<0 >>> x>0 or y>0 >>> x<0 or y<0 >>> x<0 or y>0
On suppose que les variables x et y ont pour valeurs respectives des entiers 1 et 2. On souhaite échanger le contenu de ces variables.
Méthode 1 : en utilisant une variable auxiliaire tmp.
Méthode 2 : en effectuant la séquence d'instructions suivante :
>>>x=x+y ; y=x-y ; x=x-y
Quels sont les contenus des variables x et y en fin de séquence ?
Méthode 3 : Utiliser une affectation parallèle
SolutionsMéthode 1 | Méthode 2 | Méthode 3 |
>>> x=1 >>> y=2 >>> tmp=x >>> x=y >>> y=tmp >>> x,y (2, 1) |
>>> x=1 >>> y=2 >>> x=x+y >>> y=x-y >>> x=x-y >>> x,y (2, 1) |
>>> x=1 >>> y=2 >>> x,y=y,x >>> x,y (2, 1) |
>>> h, m, s = 15, 27, 34 >>> print("nombre de secondes écoulées depuis minuit = ", h*3600 + m*60 + s)