La notion de variable est un peu différente de celle utilisée en mathématiques ( x, y,...).
En informatique, c'est en fait la représentation abstraite d'un emplacement dans la mémoire de l'ordinateur, représentation qui permet de manipuler simplement cette mémoire sans se soucier de son emplacement exact ni de la manière dont on la lit où on l'écrit ( ces taches sont dévolues au système d'exploitation de l'ordinateur ).
Une variable sert à stocker le résultat d'un calcul pour le réutiliser plus tard, le manipuler,...
C'est donc une « case » de rangement dans la mémoire ( c'est en fait un peu plus complexe que ça, mais on pourra se contenter de cette analogie dans un premier temps ).
Une variable est caractérisée par :
On peut donner à une variable le nom que l'on veut, depuis la simple lettre ( i
, n
, valeur2
,... ) jusqu'à des expressions assez complexes
( nom_de_ma_variable
, valeur_du_tock
,...), mais quelques limitations existent :
_
)Variable
et variable
désigneront deux variables différentes.Et quelques règles de « bonne conduite » ( qui font partie de conventions appelées PEP8) doivent être suivies : même si le programme fonctionnera sans les respecter, ces règles apportent de la lisibilité au code :
score
, nombre_a_deviner
, compteur
,... )En effet, selon cette nature ( nombre entier, à virgule, lettre, chaîne de caractères,....), la mémoire de l'ordinateur occupée par l'information stockée sera plus ou moins importante, et le langage a donc besoin de cette information pour "réserver" la place nécessaire en mémoire...
Dans le cas du langage Python, les types de variables de base ( = types primitifs ) les plus fréquemment utilisés sont :
Nom du type | Type de données |
---|---|
boolean ( booléen ) |
Deux valeurs possibles : VRAI ou FAUX ( TRUE or FALSE ) |
int ( entier ) |
Valeur entière |
float ( flottant ) |
Valeur à virgule flottante ( décimale ) Le point décimal ("." ) est toujours utilisé en informatique à la place de la virgule. La puissance de 10 est représentée par la lettre e : 1,6 x 103 → 1.6e3 |
str ( chaîne ) |
chaîne ( = suite ) de caractères codée en UNICODE |
Python est un langage à typage dynamique, c'est à dire que, lorsqu'une variable est définie, Python déterminera automatiquement son type selon la nature de la donnée que le programmeur souhaite y ranger.
De plus, le type de cette donnée pourra changer au cours du programme.
En conséquence, il est inutile de préciser le type d'une variable dans un script Python, tout est géré de manière transparente par le langage...
( Dans les langages à typage statique comme Java ou C++, le programmeur est obligé de préciser le type de ses variables sous peine d'erreur....sans parler du cas où il s'aviserait de changer le type de la donnée !!.... )
Lorsqu'on « stocke » une donnée dans une variable, on dit qu'on affecte à celle-ci une valeur.
Le signe de l'affectation est le signe égal (=
)
Exemples :
i = 3.4
octet = 255
une_lettre = 'A' # on peut utiliser pour les chaînes des
mon_nom = "Durand" # guillemets simples (') ou doubles (")
Attention, ce signe n'a pas la même signification qu'en mathématiques, une affectation n'est pas une équation !
Il pourrait se traduire par : "mettre ce qui est à droite du signe =
dans ce qui est à gauche.".
Dans certains ( rares ) langages, ainsi qu'en algorithmique, on utilisera d'ailleurs plutôt une écriture du style :
i ← 3.4
octet ← 255
...
Une fois initialisée, une variable peut alors être manipulée et son contenu transformé, en lui affectant le résultat d'une expression : c'est un ensemble d'autre(s) variable(s) et/ou de valeur(s) numérique(s), combinées à l'aide d'opérateurs mathématiques (voir ci-dessous).
L'expression est tout d'abord évaluée ( = calculée ), puis son résultat est affecté à la variable.
Exemples :
j = i + 1 # on affecte la valeur de i + 1 à la variable j
i = 3 + 5 * a # on stocke le résultat de l'expression "3 + 5*a" dans la variable i
A RETENIR : l'affectation donne toujours à la variable à gauche du signe =
la valeur de ce qu'il y a à droite ( qui n'est par contre pas modifié ! ).
Les opérations arithmétiques de base utilisables dans les expressions sont les suivantes :
Opérateur | Exemple | Résultat | |
---|---|---|---|
- x |
opposé | x = 10 y = - x |
y = - 10 |
x + y |
addition | x = 10 y = x + 20 |
y = 30 |
x - y |
soustraction | x = 10 y = x - 20 |
y = - 10 |
x * y |
multiplication | x = 5 y = x * 10 |
y = 50 |
x / y |
division décimale | x = 5 y = x / 2 |
y = 2.5 |
x // y |
division entière | x = 5 y = x // 2 |
y = 2 Renvoie donc le quotient entier d'une division |
x % y |
modulo | x = 5 y = x % 2 |
y = 1 Renvoie donc le reste d'une division entière |
x ** y |
puissance | x = 5 y = x ** 2 |
y = 25 |
Ces opérateurs peuvent bien sur être utilisés conjointement dans une même expression.
Des fonctions plus complexes peuvent être aussi utilisées sur les variables : sin, cos, log,....
Dans les tableaux suivants, quelles sont les valeurs contenues dans les variables après chaque instruction ?
Pour vérifier les résultats, cliquer sur les cases correspondantes...
Il existe dans Pyzo un outil bien pratique pour étudier le contenu successif des variables lors de l'exécution d'un script : l'inspecteur de variables.
Outils > Workspace
; il s'affiche en bas à droite sous l'explorateur de fichiers.
Exécuter > Exécuter la sélection et avancer
. Le contenu des variables du script s'affiche alors.Script | Valeurs de | Commentaire | |
---|---|---|---|
a | b | ||
a = b = 1 |
? 1 | ? 1 | Il s'agit d'une affectation multiple |
b = a + 3 |
? 1 | ? 4 | Si une variable n'est pas modifiée, elle garde la valeur qu'elle avait jusqu'alors... |
a = 3 |
? 3 | ? 4 |
Script | Valeurs de | Commentaire | ||
---|---|---|---|---|
a | b | c | ||
a = 5 |
? 5 | ? Non initialisée | ? Non initialisée | La tentative d'affichage d'une variable non-initialisée se traduit par une erreur... |
b = 3 |
? 5 | ? 3 | ? Non initialisée | |
c = a + b |
? 5 | ? 3 | ? 8 | |
a = 2 |
? 2 | ? 3 | ? 8 | |
c = a - b |
? 2 | ? 3 | ? -1 |
Une instruction peut affecter à une variable le résultat d'une expression faisant référence à la variable elle-même.
Comment cela fonctionne-t-il ? Le résultat d'une expression est toujours évalué avant d'affecter ce résultat à une variable : cette dernière garde donc pendant ce "temps" la valeur qu'elle avait jusqu'alors.
Lors d'une affectation "circulaire", c'est donc le contenu précédent de la variable qui est utilisé pour déterminer la nouvelle valeur à lui affecter...
Script | Valeurs de | Commentaire | |
---|---|---|---|
a | b | ||
a , b = 5 , 2 |
? 5 | ? 2 | Il s'agit ici d'une affectation parallèle. |
a = a + 1 |
? 6 | ? 2 | Ceci est une incrémentation... |
b = b - 3 |
? 6 | ? -1 | ...et ceci une décrémentation... |
a = a * 3 |
? 18 | ? -1 |
Une incrémentation affecte à une variable le résultat de son contenu précédent auquel on ajoute une certaine valeur.
Elle peut être remplacée par l'expression simplifiée :
a = a + 1 équivaut à : a += 1
Une décrémentation affecte à une variable le résultat de son contenu précédent auquel on retranche une certaine valeur.
Elle peut être remplacée par l'expression simplifiée :
b = b - 3 équivaut à : b -= 3
Que s'affiche-t-il à la fin de l'exécution de chacun des scripts suivants ?
Dans ces exercices, vous allez utiliser vos premières fonctions : il s'agit de portions de code que l'on peut exécuter "à la demande"; ces "morceaux de code" sont repérés par un nom suivi de deux parenthèses, avec entre les parenthèses, diverses informations que l'on appelle l'argument ( ou paramètre ) de la fonction.
Vous coderez bientôt vos propres fonctions, mais pour l'instant, vous utiliserez celle qui sont directement intégrées au langage Python ( et dont le code vous est "invisible" ), comme les deux "classiques" suivantes :
input()
.
Exemple :
nom = input('Entrez votre nom SVP') # demande à l’utilisateur son nom et affecte cette donnée à la variable 'nom'
Entre les parenthèses, on écrira l'information à afficher à destination de l'utilisateur. La donnée entrée par l'utilisateur est affectée à la variable en début d'instruction.
MAIS attention : la fonction input()
renvoie toujours une variable de type str
( chaîne de caractère ) ;
pour pouvoir l’utiliser ensuite dans un calcul numérique, il faut donc la "transformer" en une variable de type numérique, sinon Python affiche une erreur ( et oui, on ne peut
pas diviser des choux par des carottes....); on dit que l'on transtype cette variable.
Parfois, Python transtype automatiquement les variables, mais ce n'est pas le cas ici; il existe donc des fonctions pour cela :
Fonction | transtypage vers le type... |
---|---|
int(variable) |
entier |
float(variable) |
flottant |
str(variable) |
chaîne |
A vous de déterminer lors d'un transtypage quel est le type le mieux adapté...
print()
.
Cette fonction permet d'afficher le contenu de variables, des chaînes de caractères etc...
On peut à l'aide de la fonction print()
afficher plusieurs choses à la suite, en les séparant par des virgules.
Exemple :
print('Le résultat est :' , resultat ) # affiche le contenu de la variable "resultat" après celui de la chaîne "Le résultat est :"
Il est aussi possible de formater le résultat affiché pour, par exemple, n'afficher qu'un certain nombre de décimales d'une valeur.
On utilise pour cela la fonction : format(valeur à afficher , format)
Exemple :
print('Le résultat est :', format(resultat,'.2f')) # affiche le contenu de "resultat" avec 2 décimales
Pour faire ces applications, vous pouvez utiliser Pyzo ou alors les petits éditeurs directement intégrés à chaque exercice, et qui permettent également d’exécuter le code écrit.
Écrire un programme qui :
Pour les phrases à afficher, vous suivrez le modèle de l'exemple suivant:
Premier entier: # l'utilisateur tape 3
Deuxième entier: # l'utilisateur tape 5
Somme : 8.
Différence: -2.
ALGORITHME
nombre1
la valeur du premier nombre et la transtyper en un entiernombre2
la valeur du deuxième nombre et la transtyper en un entiersomme
la valeur de la sommedifference
la valeur de la différencesomme
et difference
en respectant les contraintes d'affichageÉcrire un programme qui demande à l’utilisateur d'entrer deux nombres entiers, puis qui affiche leur quotient entier puis le reste de leur division.
ALGORITHME
nombre1
la valeur du premier nombre et la transtyper en un entiernombre2
la valeur du deuxième nombre et la transtyper en un entierquotient
la valeur du quotient entierreste
la valeur du retse ( voir opérateur modulo )quotient
et reste
en respectant les contraintes d'affichageÉcrire un script qui demande à l'utilisateur un prix en euros, puis le convertit en dollars (avec le taux suivant: 1 euro= 1,0627 dollars), puis qui fait la conversion inverse. On n'arrondira pas les résultats.
Pour les phrases à afficher, vous suivrez le modèle de l'exemple suivant:
Prix en euros: # l'utilisateur tape 100
Prix en dollars: 106.27
Prix en dollars: # l'utilisateur tape 50
Prix en euros: 47.05
Une petite contrainte pour l'écriture de votre script : le taux de change sera stocké dans une variable initialisée au début du script; elle sera ensuite utilisée dans l'expression faisant la conversion.
L'intérêt de procéder ainsi est que si l'on veut modifier le taux de change, il n'y a qu'une seule instruction à changer, sinon il faut modifier chaque instruction où ce taux de change intervient...La maintenance du script est donc facilitée.
ALGORITHME
taux
avec la valeur du taux de change indiquémontant
la valeur du montant à convertir et la transtyper en un flottantchange
la valeur du change euros → dollars : montant * taux
change
en respectant les contraintes d'affichagePour la deuxième conversion dollars → euros, on peut réutiliser les mêmes variables ( en modifiant bien sûr l'affichage ), et changer simplement l'expression de calcul : montant / taux
Écrire un programme qui demande à l’utilisateur d'entrer une température en °C ( degré Celsius ) et qui la convertit en °F ( degré Fahrenheit ).
La relation entre les deux échelles de température est : °F = °C x 1,8 + 32
ALGORITHME
celsius
la valeur de la température en degré Celsiuscelsius
en un flottantfahrenheit
l'expression : 1,8 * celsius + 32fahrenheit
correctement formatéeÉcrire un programme qui, à partir de la saisie d’un rayon et d’une hauteur demandés à l'utilisateur, calcule le volume d’un cylindre : V = π ×r2 × h.
Pour la valeur de pi, on pourrait se contenter d'une approximation...mais il se trouve que Python en propose une valeur très précise qui n'est cependant pas directement accessible.
Pour pouvoir l’utiliser, il faut l'importer à partir d'un module, c'est à dire une portion de code externe écrite par un autre programmeur.
Tout se passera alors comme si cette portion de code faisait partie de notre propre programme, même si elle ne sera pas visible directement dans le code...
Le module dans lequel se trouve la valeur de pi est le module Math
. Pour l'importer, deux possibilités ( à placer au début du script ) :
from math import * # importe le module Math en entier ( A ÉVITER ! )
from math import pi # importe uniquement le code permettant de disposer de la valeur de pi ( à préférer )
Si on sait de quelle(s) fonctionnalité(s) on aura besoin, il est préférable de ne pas encombrer la mémoire de l'ordinateur avec le module entier; si on ne veut pas se casser la tête, on importe le module en entier...
Une fois le module ( ou la fonctionnalité ) importé(e), il suffit d'écrire pi
dans le code : à l'exécution, on utilisera alors une valeur précise de ce nombre...
Vous aurez souvent à importer des modules externes, retenez la manière de procéder.