Les variables

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 ).

Caractéristiques d'une variable

Une variable est caractérisée par :

  1. un Nom : il permet de définir une variable de manière unique.

    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 :

    • on ne peut pas utiliser les mots réservés du langage.
    • le nom doit obligatoirement commencer par une lettre, et pas un chiffre.
    • pas d'espace ni de signe de ponctuation dans le nom ! ( on peut éventuellement les remplacer par un "underscore" : _ )
    • pas de caractère accentué !
    • la casse ( lettres en majuscules ou minuscules ) est importante ; ainsi 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 :

    • donner à une variable un nom qui permet de comprendre facilement la nature de l'information qu'elle contient ( score, nombre_a_deviner, compteur,... )
    • la lettre de début du nom doit être une minuscule
    • si le nom de la variable contient plusieurs mots, ils doivent être séparés par le caractère underscore ( voir les exemples ci-dessus )
  2. un Type : il désigne la nature de l'information qui sera « contenue » dans la variable.

    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 !!.... )

  3. une Valeur : c'est la donnée que contiendra la variable.

Affectation et initialisation d'une variable dans un programme

Lorsqu'on « stocke » une donnée dans une variable, on dit qu'on affecte à celle-ci une valeur.

La première affectation s'appelle l’initialisation de la variable ; cette initialisation est obligatoire avant "d’utiliser" la variable dans le programme, sinon Python générera un message d'erreur dès qu'il en rencontrera la mention dans le code....( L'initialisation indique en fait à Python d'aller réserver de la place en mémoire pour cette variable : c'est donc la "déclaration de naissance" de la variable....)

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
...
				

Manipulation des variables

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,....

Exercices

Affectation et initialisation

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.

  • entrez dans l'éditeur le code complet du script
  • ouvrez la fenêtre de l'inspecteur de variables : Outils > Workspace; il s'affiche en bas à droite sous l'explorateur de fichiers.
  • lancer l'exécution du script pas à pas : sélectionner la première instruction du script, et faites Exécuter > Exécuter la sélection et avancer. Le contenu des variables du script s'affiche alors.
  • exécuter de même les instructions suivantes.
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

Des affectations "circulaires"...

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
					
				

QCM d'entraînement

Que s'affiche-t-il à la fin de l'exécution de chacun des scripts suivants ?

Applications

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 :

  • Pour demander à l'utilisateur d'entrer une donnée et la stocker dans une variable, on utilise la fonction 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é...

  • Pour simplement afficher une information, on utilise la fonction 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.

Somme et différence (exercice_A01.py)

Écrire un programme qui :

  1. demande à l'utilisateur deux entiers successivement, puis
  2. qui affiche la somme de ces deux entiers, puis
  3. qui affiche la différence entre le premier entier et le deuxième entier.

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

  • Demander dans une variable nombre1 la valeur du premier nombre et la transtyper en un entier
  • Demander dans une variable nombre2 la valeur du deuxième nombre et la transtyper en un entier
  • Affecter à une variable somme la valeur de la somme
  • Affecter à une variable difference la valeur de la différence
  • Afficher les variables somme et difference en respectant les contraintes d'affichage


				

Quotient et reste (exercice_A02.py)

É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

  • Demander dans une variable nombre1 la valeur du premier nombre et la transtyper en un entier
  • Demander dans une variable nombre2 la valeur du deuxième nombre et la transtyper en un entier
  • Affecter à une variable quotient la valeur du quotient entier
  • Affecter à une variable reste la valeur du retse ( voir opérateur modulo )
  • Afficher les variables quotient et reste en respectant les contraintes d'affichage


				

Conversion de monnaie (exercice_A03.py)

É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

  • initialiser une variable taux avec la valeur du taux de change indiqué
  • Demander dans une variable montant la valeur du montant à convertir et la transtyper en un flottant
  • Affecter à une variable change la valeur du change euros → dollars : montant * taux
  • Afficher la variable change en respectant les contraintes d'affichage

Pour 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



				

Conversion de température (exercice_A04.py)

É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

  • Demander dans une variable celsius la valeur de la température en degré Celsius
  • Transtyper la variable celsius en un flottant
  • Affecter à une variable fahrenheit l'expression : 1,8 * celsius + 32
  • Afficher la variable fahrenheit correctement formatée


				

Volume d'un cylindre (exercice_A05.py)

É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

	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.