Les types de variables en python.
Comme le montre l’exemple 1, différents types d’information (nombres, chaînes de caractères …) peuvent être placés dans une variable et
il est capital de connaître comment la valeur qui s’y trouve a été codée. Cette distinction correspond à la notion de type, fondamentale
en informatique car elle débouche sur le codage binaire de la variable (par exemple, un entier numérique sur 32 bits, un réel sur 64 bits
et un caractère sur 16 bits) ainsi que sur les usages qui peuvent en être faits (on ne peut pas multiplier un caractère par un nombre).
Dans le paragraphe suivant on énumère les types incontournables en Python.
Type "None"
Python propose un type None pour signifier qu’une variable ne contient rien. La variable est de type None et est égale à None.
s = None
print(s) # affiche None
Certaines fonctions (voir le chapitre sur les fonctions) utilisent cette convention lorsqu’il leur est impossible de retourner un résultat.
Les types entiers et réels
Il existe deux types de nombres en Python, les nombres réels (float) et les nombres entiers (int). L’instruction x = 5 crée une variable de type
int initialisée à 5 tandis que y = 5.0 crée une variable de type float initialisée à 5.0. Le programme suivant permet de vérifier cela en
affichant les variables x et y, leurs valeurs et leurs types respectifs grâce à la fonction type.
x = 5
y = 5.0
print ("x =", x, type(x))
print( "y =", y, type(y))
ce qui affiche :
x = 5 <class 'int'>
y = 5.0 <class 'float'>
Exemple 3
a=9+7
print('Valeur de a : ',a)
print('Type de a : ',type(a))
b=9/4
print('Valeur de b : ',b)
print('Type de b : ',type(b))
c=9//4
print('Valeur de c : ',c)
print('Type de c : ',type(c))
d=9.+7
print('Valeur de d : ',d)
print('Type de d : ',type(d))
Ce qui affiche :
Valeur de a : 16
Type de a : <class 'int'>
Valeur de b : 2.25
Type de b : <class 'float'>
Valeur de c : 2
Type de c : <class 'int'>
Valeur de d : 16.0
Type de d : <class 'float'>
Voir Types numériques pour la liste des opérateurs qui s’appliquent aux nombres réels et entiers.
Les fonctions int et float permettent de convertir un nombre quelconque ou une chaîne de caractères respectivement en un entier
(arrondi à 'unité) et en un nombre réel.
Exemple 4
x = int (12.7)
y = float (7)
z = int ("7")
print ("x = ", x," : ", type(x))
print (" y = ",y, " : ", type(y))
print (" z = ", z," : ", type(z))
Ce qui affiche :
x = 12 : <class 'int'>
y = 7.0 : <class 'float'>
z = 7 : <class 'int'>
Remarque : Conversion en un nombre entier
Il peut arriver que la conversion en un nombre entier ne soit pas directe.
Dans l’exemple qui suit, on cherche à convertir une chaîne de caractères
(voir le paragraphe suivant) en entier mais cette chaîne représente un réel.
Il faut d’abord la convertir en réel puis en entier, c’est à ce moment que l’arrondi sera effectué.
i = int ("3.5")
print ("i = ", i)
Ce qui affiche :
ValueError: invalid literal for int() with base 10: '3.5'
En revanche :
i = int (float"3.5")
print ("i = ", i)
fonctionne et affiche :
i = 3
Les booléens
Les booléens sont le résultat d’opérations logiques et ont deux valeurs possibles : True ou False.
x = 3 < 4
y = not x
print('x = ',x, ", Type de x : ",type(x))
print('y = ',y, ", Type de y : ",type(y))
Ce qui affiche :
x = True , Type de x : <class 'bool'>
y = False , Type de y : <class 'bool'>
Le type string (str) ou chaîne de caractère
Le terme "chaîne de caractères" ou string en anglais signifie une suite finie de caractères qui ne sont pas seulement des lettres
mais ils peuvent être aussi des nombres, <, @,*,%, etc,.. ou un mélange . Cette suite de caractères est comprise entre deux guillemets ou deux apostrophes,
ces deux symboles sont interchangeables.
Il ne faut pas confondre la partie entre guillemets ou apostrophes, qui est une constante, de la variable qui la contient.
Exemple 5
t = "string@texte"
print('t = ', t)
print('Type de t : ',type(t))
x=str(3.8)
print('x = ', x)
print('Type de x : ',type(x))
y='3.8'
print('y = ', y)
print('Type de y : ',type(y))
z=float('3.8')
print('z = ',z)
print('Type de z : ',type(z))
Ce qui affiche :
t = string@texte
Type de t : <class 'str'>
x = 3.8
Type de x : <class 'str'>
y = 3.8
Type de y : <class 'str'>
z = 3.8
Type de z : <class 'float'>
Remarque
Regardons le programme suivant :
z = 'string = texte, initialisation avec apostrophes'
print( "la valeur de z : ", z, type (z))
x = "morceau1" \
"morceau2"
print ("x = ",x) # il ne doit rien y avoir après le symbole \,
# pas d’espace ni de commentaire
y = """première ligne
seconde ligne""" # chaîne de caractères qui s’étend sur deux lignes
print ("y = ", y)
Le résultat de ce petit programme est le suivant :
la valeur de z : string = texte, initialisation avec apostrophes <class 'str'>
x = morceau1morceau2
y = première ligne
seconde ligne
La troisième chaîne de caractères créée lors de ce programme s’étend sur deux lignes. Il est parfois plus commode d’écrire du texte sur
deux lignes plutôt que de le laisser caché par les limites de fenêtres d’affichage. Python offre la possibilité de couper le texte en
deux chaînes de caractères recollées à l’aide du symbole \ à condition que ce symbole soit le dernier de la ligne sur laquelle il apparaît.
De même, lorsque le texte contient plusieurs lignes, il suffit de les encadrer entre deux symboles """ ou """ pour que l’interpréteur Python
considère l’ensemble comme une chaîne de caractères et non comme une série d’instructions.
Par défaut, Python ne permet pas l’insertion de caractères tels que les accents dans les chaînes de caractères, pour résoudre ce problème,
il faut ajouter une ligne placée en première position du programme qui précise que des accents pourront être utilisés. S’il fallait utiliser
des caractères autres que latins, il faudrait alors choisir lejeu de caractères utf - 8 qui s’appliquent aussi aux langues orientales.
Remarque
Pour insérer un guillemet dans une chaîne de caractères encadrée elle-même par des guillemets, il faut le faire précéder du symbole \.
La séquence \" est appelée un extra-caractère (voir tableau ci-dessous).Liste des extra-caractères les plus couramment utilisés à
l’intérieur d’une chaîne de caractères :
|
\" guillemet
\' apostrophe
\n passage à la ligne
\\ insertion du symbole \
\% pourcentage, ce symbole est aussi un caractère spécial
\t tabulation
\r retour à la ligne, peu usité, il a surtout son importance lorsqu’on passe d’un système Windows à
Linux car Windows l’ajoute automatiquement à tous ses fichiers textes.
|
Le type liste (list)
Une liste permet de lister différents objets qui peuvent être de tout type. Elle apparaît comme une succession d’objets compris entre crochets et
séparés par des virgules. On peut donc placer dans des listes du texte, des nombres, des images ou même des listes comme on le verra plus tard.
l=[ 4, 'texte', 11.2, chien, 7/3, 7//3, '3.2', changer]
print("Le contenu de la liste l : ", l)
print("Le type de l : ", type(l) )
for i,x in enumerate(l) :
print( "Valeur de l[{}] : {}.".format(i,x) )
print( "Type de l[{}] : {}.".format(i,type(x)) )
Le contenu de la liste l : [4, 'texte', 11.2, 'chien', 2.3333333333333335, 2, '3.2', 'changer']
Le type de l : <class 'list'>
Valeur de l[0] : 4.
Type de l[0] : <class 'int'>.
Valeur de l[1] : texte.
Type de l[1] : <class 'str'>.
Valeur de l[2] : 11.2.
Type de l[2] : <class 'float'>.
Valeur de l[3] : chien.
Type de l[3] : <class 'str'>.
Valeur de l[4] : 2.3333333333333335.
Type de l[4] : <class 'float'>.
Valeur de l[5] : 2.
Type de l[5] : <class 'int'>.
Valeur de l[6] : 3.2.
Type de l[6] : <class 'str'>.
Valeur de l[7] : changer.
Type de l[7] : <class 'str'>.
Passage d'une liste à une chaîne et réciproquement.
Il est parfois utile de passer d'une liste à une chaîne, d'une chaîne à une liste.
On consultera notamment les fonctions join et split :
Le type fonction (function)
def f(x) : return 5x+4
g=lambda x:x**2
Listef=[ f(k) for k in range(5)]
print("Liste d'images par f : ", Listef)
Listeg=[ g(k) for k in range(5)]
print("Liste d'images par g : ", Listeg)
print('Type de f : ', type(f) )
print('Type de g : ', type(g) )
Liste d'images par f : [4, 9, 14, 19, 24]
Liste d'images par g : [0, 1, 4, 9, 16]
Type de f : class 'function'
Type de g : class 'function'
Le type tuple
Les tuples sont un tableau d’objets qui peuvent être de tout type. Ils ne sont pas modifiables.
Un tuple apparaît comme une liste d’objets comprise entre parenthèses et séparés par des virgules. Leur création reprend le même format :
Remarque
On utilisera rarement le type tuple dans le cours d'ISN.
x = (4,5) # création d’un T-uple composé de 2 entiers
y = ("un",1,"deux",2) # création d’un T-uple composé de 2 chaînes de caractères
# et de 2 entiers, l’ordre d’écriture est important.
z = (3,) # création d’un T-uple d’un élément, sans la virgule, le résultat est un entier
la valeur de x : (4, 5)
le type de x : <class 'tuple'>
la valeur de y : ('un', 1, 'deux', 2)
le type de y : <class 'tuple'>
la valeur de z : (3,)
le type de z : <class 'tuple'>
Un exemple parmi les nombreux intérêts de ce type : pouvoir retourner plusieurs valeurs par une fonction.
Exemple : la division euclidienne :
def divEucl(a,b):
""" a et b sont deux entiers naturels, b non nul.
divEucl retourne le quotient et le reste dans la division de a par b
sous forme d'un tuple."""
q=0
while a >= b :
a-=b
q+=1
return (q, a)
a=231
b=13
quotient, reste = divEucl(a,b)
print(quotient)
print(reste)
17
10
Le type dictionnaire (dict)
Les dictionnaires sont des listes de couples. Chaque couple contient une clé et une valeur. Chaque valeur est indicée par sa clé.
La valeur peut-être de tout type, la clé ne doit être ni une liste, ni un dictionnaire. Chaque clé comme chaque valeur peut avoir
un type différent des autres clés ou valeurs.
Un dictionnaire apparaît comme une succession de couples d’objets comprise entre accolades et séparés par des virgules.
La clé et sa valeur sont séparées par le symbole : . Leur création reprend le même format :
Exemple >
d={ 'Henry' : '06 23 56 45 78', 'Léa' : '06 56 45 32 76', 'Elias' : '06 36 56 45 48' }
print('Le type de d : ', type(d))
for x in d :
print("Nom de l'élève : {}. n° de tél de {} : {}.".format(x, x, d[x]))
print("Ajout d'un élément.")
d['Sandra']='06 66 65 23 12'
print(d)
On obtient :
Le type de a : Le type de d : <class 'dict'>
Nom de l'élève : Elias. n° de tél de Elias : 06 36 56 45 48.
Nom de l'élève : Léa. n° de tél de Léa : 06 56 45 32 76.
Nom de l'élève : Henry. n° de tél de Henry : 06 23 56 45 78.
Ajout d'un élément.
{'Sandra': '06 66 65 23 12', 'Elias': '06 36 56 45 48', 'léa': '06 56 45 32 76', 'Henry': '06 23 56 45 78'}
On remarquera que l'ordre d'affichage n'est pas nécessairement l'ordre de définition.
Il n'y a en fait pas d'ordre dans les éléments d'un dictionnaire.
Pour en savoir plus sur les dictionnaires, on pourra consulter
le cours de G.Swinnen.
Utilisation des modules en Python
On sait à présent utiliser quelques instructions de base en Python. Cependant, il arrivera qu'on ait besoin d'autres fonctions. Elles sont regroupées par
module que l'ont peut importer au fur et à mesure.
Par exemple le module de math permet d'utiliser des fonctions mathématiques.
Il existe deux façon d'utiliser un module :
- Soit on importe tout et on peut utiliser les fonctions normalement :
from math import *
print("la racine carrée de 3 est : ", sqrt(3))
print("la partie entière de 13.945 est : ", floor(13.945))
Ce qui affiche :
la racine carrée de 3 est : 1.7320508075688772
la partie entière de 13.945 est : 13
Remarque
Attention sans l'instruction :
from math import *
le programme:
print("la racine carrée de 3 est : ", sqrt(3))
print("la partie entière de 13.945 est : ", floor(13.945))
ne fonctionne pas car on ne reconnaît pas les fonctions :
sqrt()
floor()
Le programme ne s'exécute pas et on obitent le message :
NameError: name 'sqrt' is not defined
Soit on importe le module de la manière suivante :
import math
print("la racine carrée de 3 est : ", math.sqrt(3))
print("la partie entière de 13.945 est : ", math.floor(13.945))
Ce qui affiche :
la racine carrée de 3 est : 1.7320508075688772
la partie entière de 13.945 est : 13
Remarque
De même, sans l'instruction :
import math
le programme:
print("la racine carrée de 3 est : ", math.sqrt(3))
print("la partie entière de 13.945 est : ", math.floor(13.945))
ne fonctionne pas car on ne reconnaît pas les fonctions :
math.sqrt()
math.floor()
Le programme ne s'exécute pas et on obitent le message :
NameError: name 'math' is not defined
Soit on importe que les fonctions du module dont on a besoin :
from math import sqrt, floor
print("la racine carrée de 3 est : ", sqrt(3))
print("la partie entière de 13.945 est : ", floor(13.945))
Ce qui affiche :
la racine carrée de 3 est : 1.7320508075688772
la partie entière de 13.945 est : 13