Types et variables

Nombres et calcul arithmétique

Python permet de réaliser facilement des calculs arithmétiques. Il est par exemple possible de saisir dans l’interpréteur :

>>> 2 + 3
5
>>> 2 * 3
6
>>> 10 / 2
5.0

Les opérateurs arithmétiques sont :

Les opérateurs arithmétiques

+

L’addition

-

La soustraction

*

La multiplication

**

La puissance

/

La division

//

La division arrondie à l’inférieur

%

Le reste de la division (modulo)

Note

Il existe également l’opérateur @ pour la multiplication matricielle. Cependant, Python n’a pas de représentation par défaut des matrices. Cet opérateur n’est donc pas utilisé dans l’environnement Python par défaut.

Par défaut, Python définit une priorité pour les opérateurs. Par exemple, la multiplication et la division sont prioritaires sur l’addition et la soustraction. Pour les expressions mathématiques plus complexes, il est possible d’utiliser les parenthèses.

>>> 10 + 2 * 3 + 6 / 2
19.0
>>> (10 + 2) * (3 + 6) / 2
54.0

Comme beaucoup d’autres langages de programmation, Python fait une différence entre les nombres entiers (int) et les nombres réels appelés également les nombres à virgule flottante (float).

Les nombres entiers sont par défaut écrits en base 10. Mais il est également possible d’écrire la valeur d’un nombre en binaire (base 2) en la préfixant par 0b, en octal (base 8) en la préfixant par 0o et en hexadécimal (base 16) en la préfixant par 0x.

>>> 0b1000
8
>>> 0o10
8
>>> 0xFF
255

Les nombres réels s’écrivent avec un . pour séparer la partie entière de la partie décimale. Il est également possible d’utiliser la notation scientifique de la forme x * 10 y

>>> .25
0.25
>>> 12.35
12.35
>>> 2.3e3
2300
>>> 2.3e-3
0.0023

Les entiers et les nombres naturels sont traités différemment par Python. Il est néanmoins possible de passer de l’un à l’autre de manière transparente pour le programmeur. Par exemple la division de deux entiers produit un nombre réel :

>>> 5 / 2
2.5

Tandis que la division avec arrondi à l’inférieur de deux nombres entiers produit un entier :

>>> 5 // 2
2

Note

Python supporte également les nombres complexes. La partie imaginaire est suffixée par la lettre j :

>>> 1 + 1j
(1+1j)
>>> (1 + 1j) * (3 + 2j)
(1+5j)

Important

Les nombres à virgule flottante ne permettent pas de représenter les nombres de manière précise. Les opérations arithmétiques sur ces nombres peuvent conduire à des arrondis par la machine. Si l’application doit produire des résultats précis, alors il est conseillé de s’appuyer sur le module decimal… une fois que nous aurons vu les modules et la programmation objet.

Les variables

Une variable est une zone nommée contenant une information. Une variable possède un identifiant (son nom) et un type (la nature de l’information qu’elle contient). Pour déclarer une variable en Python, il suffit simplement de donner son nom et de lui affecter une valeur grâce à l’opérateur d’affectation = :

>>> x = 1
>>> y = 2.2

Python est un langage de programmation à typage dynamique. Cela signifie que le type de la variable est déterminé par le type de la valeur qu’il contient. Dans l’exemple ci-dessus, le type de la variable x est int (un nombre entier) et le type de la variable y est float (un nombre réel).

Astuce

Vous pouvez demander le type d’une variable grâce à la fonction type :

>>> x = 1
>>> y = 2.2
>>> type(x)
<class 'int'>
>>> type(y)
<class 'float'>
>>> x = y
>>> type(x)
<class 'float'>

Dans l’exemple ci-dessus, on voit que le type de la variable x change lorsqu’on lui affecte la valeur de y.

L’identifiant (ou le nom) d’une variable s’écrit par convention en lettres minuscules. L’identifiant peut contenir des chiffres à condition qu’ils ne soient pas en premier pour ne pas les confondre avec un nombre. Si le nom est formé de plusieurs mots, on les sépare par un trait inférieur (underscore) suivant la notation dite du snake case.

>>> v = 1
>>> v2 = 2
>>> ma_variable = 3
>>> une_autre_variable = 4

Le nom d’une variable peut commencer par un trait inférieur (underscore) mais cela est réservé pour des usages particuliers.

Note

Python ne supporte pas directement la notion de constante. Pour signaler que le contenu d’une variable ne devrait pas être modifié par le programme, les programmeurs ont coutume d’écrire son nom en lettres majuscules. Il n’y a cependant rien qui interdit effectivement de modifier sa valeur :

>>> MA_CONSTANTE = 4
>>> PI = 3.1416

Une variable peut être utilisée dans une expression conforme à son type. Ainsi, il est possible d’utiliser les variables de type int ou float dans des opérations arithmétiques :

>>> x = 1
>>> y = 2.2
>>> x + y * 2
5.4

Il est possible d’inverser le signe d’une variable grâce à l’opérateur unaire - :

>>> x = 2
>>> -x
-2
>>> y = -4
>>> -y
4

Il est possible de modifier le contenu d’une variable en utilisant l’opérateur d’affectation = :

>>> x = 1
>>> x = 2
>>> x = 2 * x
>>> x
4

Note

Pour ajouter 1 à une variable, on peut écrire :

>>> x = x + 1

Il existe une forme compacte qui s’écrit :

>>> x += 1

Cette forme est disponible pour tous les opérateurs arithmétiques :

>>> x -= 3
>>> x *= 5
>>> x //=2
>>> x **=3
>>> x
343

Une variable peut avoir la valeur spéciale None. Ce mot-clé indique que la variable n’a aucune valeur ni aucun type (ou plus exactement la variable a le type spécial NoneType).

>>> nothingness = None

Prudence

Pour pouvoir être utilisée dans une expression, une variable doit avoir été déclarée :

>>> x = 1
>>> x += variable_non_declaree
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'variable_non_declaree' is not defined

Exercice

Exercice : calcul

Devinez ce qui s’affichera dans la console Python à la place des points d’interrogation :

>>> x = 2
>>> y = 3
>>> z = 5
>>> x + y / y
???????????????????????
>>> (x + y) / z
???????????????????????
>>> y / x
???????????????????????
>>> z // x
???????????????????????
>>> y % x
???????????????????????
>>> total = x
>>> total -= z
>>> total //= 3
>>> total
???????????????????????

La chaîne de caractères

En plus des nombres, un autre type de données couramment utilisé est la chaîne de caractères (character string ou plus simplement string), c’est-à-dire une portion de texte. En Python, une chaîne de caractères est encadrée par le caractère apostrophe ' ou le caractère guillemet " que l’on appelle les délimiteurs :

>>> "hello the world"
>>> 'bonjour le monde'

Les chaînes de caractères utilisent l’encodage UTF-8. Si l’on désire faire apparaître certains caractères spéciaux, il faut utiliser un caractère échappé, c’est-à-dire une séquence commençant par \ afin de la différencier des caractères normaux ou des délimiteurs :

retour à la ligne

\n

tabulation

\t

apostrophe

\'

guillemet

\"

antislash

\\

Si vous ne souhaitez pas utiliser de caractères d’échappement, alors vous pouvez déclarer une chaîne de caractères brut (raw string) en préfixant la chaîne avec la lettre r. Ainsi la chaîne de caractères :

"\t\n"

correspond à deux caractères : une tabulation suivie d’un retour à la ligne. Tandis que la chaîne de caractères :

r"\t\n"

correspond à quatre caractères : antislash, t, antislash et n.

Si vous voulez écrire une chaîne de caractères sur plusieurs lignes, vous pouvez utiliser le caractère antislash \ suivi immédiatement d’un retour à la ligne. Ces caractères ne seront pas considérés comme faisant partie de la chaîne finale.

"Une chaîne de caractères\
  sur plusieurs lignes en\
  utilisant l'antislash"

correspond à :

"Une chaîne de caractères sur plusieurs lignes en utilisant l'antislash"

Sinon vous pouvez utiliser le triple guillemet """" qui permet de créer une chaîne de caractères sur autant de lignes que l’on souhaite sans avoir besoin de spécifier l’antislash. Mais attention, les retours à la ligne seront présents dans la chaîne de caractères.

"""Une chaîne de caractères
sur plusieurs lignes en
utilisant le triple guillemet"""

correspond à :

"Une chaîne de caractères\nsur plusieurs lignes en\nutilisant le triple guillemet"

Une variable contenant une chaîne de caractères et de type str. L’opérateur +, appelé opérateur de concaténation, permet de créer une nouvelle chaîne à partir de deux chaînes accolées l’une à l’autre :

>>> h = "hello"
>>> w = "world"
>>> h + " " + w
"hello world"

Formatage de chaîne de caractères

Pour afficher une information à l’écran, il est souvent nécessaire de prendre des informations telles que des nombres et les insérer suivant un certain format dans une chaîne de caractères.

On peut indiquer dans une chaîne de caractères l’emplacement où la valeur d’une variable doit être insérée grâce au caractère % suivi d’une lettre indiquant le type de la variable :

%d

Nombre entier en base 10

%i

Nombre entier en base 10

%o

Nombre entier en base 8

%x

Nombre entier en base 16 (lettres en minuscule)

%X

Nombre entier en base 16 (lettres en majuscule)

%f

Nombre réel

%s

Chaîne de caractères

On utilise l’opérateur % après la chaîne de caractères pour spécifier la ou les variables à utiliser. S’il y en a plusieurs, il faut obligatoirement les signaler dans le bon ordre entre parenthèses et séparées par une virgule.

>>> total = 122
>>> "Le montant de la facture est de %d euros avec une TVA de 20.0%%" % total
'Le montant de la facture est de 122 euros avec une TVA de 20.0%'
>>> "%s le %s" % ("hello", "monde")
'hello le monde'

Astuce

Pour écrire le caractère % dans la chaîne, il faut écrire %%.

Note

Pour plus d’information sur le formatage, reportez-vous à la documentation complète.

Depuis Python 3.6, il est possible d’utiliser le formatage de chaîne de caractères en préfixant la chaîne par f. Le motif défini par la chaîne peut contenir entre accolade {} le nom d’une variable dont la valeur sera insérée à cet emplacement.

>>> code_facture = "XF32"
>>> montant = 122.55
>>> f"La facture n°{code_facture} a un montant de {montant} euros"
'La facture n°XF32 a un montant de 122.55 euros'

Note

Pour plus d’information sur le formatage, reportez-vous à la documentation complète.

Exercice

Exercice : formater des chaînes de caractères

Avec les variables suivantes :

produit = "Aspi Deluxe"
code = "AS0003"
prix_ht = 253.99
garantie = 2
tva = prix_ht * .20

Formater les chaînes de caractères pour produire les résultats suivants :

'Produit du mois : Aspi Deluxe'
'AS0003 - Aspi Deluxe garanti 2ans'
'              AS0003 - Aspi Deluxe'
'AS0003 - Aspi Deluxe : 253.99€ HT'
'AS0003 - Aspi Deluxe : 304.79€ TTC'
'AS0003 - Aspi Deluxe : 0000304.79€ TTC'

Utilisez le formatage old-school et le nouveau formatage de chaînes.

Le type booléen

Un type booléen accepte deux valeurs : True et False. Les valeurs booléennes peuvent être utilisées avec les opérateurs logiques : not, and et or.

>>> a = True
>>> b = False
>>> not a
False
>>> not b
True
>>> a and b
False
>>> a and not b
True
>>> a or b
True
>>> not a or b
False

Il existe des opérateurs de comparaison pour les nombres qui produisent un résultat de type booléen :

Les opérateurs de comparaison

==

égalité

!=

inégalité

<

inférieur

>

supérieur

<=

inférieur ou égal

>=

supérieur ou égal

>>> 1 == 2
False
>>> 1 != 2
True
>>> 1 < 2
True
>>> 1 > 2
True
>>> 1 <= 1
True
>>> 2 > 1
True
>>> 2 >= 2
True

Les chaînes de caractères acceptent également les mêmes opérateurs pour réaliser une comparaison caractère par caractère :

>>> "Hello World" == "Hello World"
True
>>> "Hello World" != "hello world"
True
>>> "Hello" < "Hello World"
True
>>> "Hello World" > "Hello"
True

Astuce

La comparaison entre chaînes de caractères est basée sur le nombres de caractères mais également sur le code des caractères. Ainsi :

>>> 'a' < 'z'
True
>>> 'a' > 'A'
True

Il est possible d’écrire des expressions booléennes complexes :

>>> x = 1
>>> y = 2
>>> message = "Bonjour à tous"
>>> x * 2 == y and message > "Bonjour"
True
>>> -1 < x < y
True