Section 4.2

Types et opérations de base

Dans la section précédente, nous avons vu comment Python effectue des calculs. Dans cette section, nous allons nous intéresser aux différents types de données que l'on peut utiliser en Python et aux opérations de base que l'on peut effectuer sur ces données.

Types de données

Comme nous l'avons vu dans la section précédente, Python permet de faire des calculs avec des nombres. On a par exemple vu comment faire des additions ou des multiplications entre des nombres. Python ne se limite pas à manipuler des nombres, il permet aussi de manipuler d'autres types de données, comme des chaînes de caractères ou des booléens (valeurs vrai et faux). Ci-dessous est un exemple de programme qui utilise ces différents types de données. Pas de nombres en vue, uniquement des chaînes de caractères et des booléens.

print("Bonjour" + " " + "le monde") print(True or False)

Dans le reste de cette section, nous allons nous intéresser aux différents types de données que l'on peut manipuler en Python et aux opérations de base qui y sont associées.

Les nombres

Comme nous l'avons vu dans la section précédente, Python permet de manipuler des nombres comme 1, 2, 0 ou encore -12. Ces nombres sont appelés des entiers (ou integers en anglais); ils n'ont pas de virgule. Python permet aussi de manipuler des nombres à virgule comme 1.5 ou -2.3. Ces nombres sont appelés des nombres à virgule flottante, ou plus simplement des flottants (ou floats en anglais). En Python, on utilise le point pour séparer la partie entière de la partie décimale.

Opérations entre les nombres

Les opérations de base que l'on peut effectuer sur des nombres sont listées dans le tableau ci-dessous. Chaque opération se fait entre deux nombres et donne un résultat qui est aussi un nombre.

Opérateur Signification Exemple Résultat
+ Addition 1 + 2 3
- Soustraction 6 - 2 4
* Multiplication 3 * 4 12
** Puissance 2 ** 5 32
/ Division 7 / 2 3.5
// Division entière 7 // 2 3
% Modulo 7 % 2 1

! Remarque

Les deux dernières opérations sont un peu plus compliquées à comprendre. La division entière permet de diviser deux nombres et de ne garder que la partie entière du résultat. Par exemple, 7 // 2 donne 3 car 7 / 2 donne 3.5 et on ne garde que la partie entière de ce résultat.

L'opération modulo est liée à la division entière. Elle permet de calculer le reste de la division entière. Dans l'exemple, 7 % 2 donne 1 car la division entière de 7 par 2 (7 // 2) donne 3, or 3 * 2 donne 6, il y a donc 1 qui manque pour arriver à 7. L'opération modulo retourne ce 1. Le résultat de l'opération modulo est toujours entre zéro (compris) et le nombre par lequel on divise (non-compris). Ainsi, par exemple, calculer un nombre entier modulo 2 donnera toujours un résultat soit de 0 (pour les nombres pairs) soit de 1 (pour les nombres impairs).

L'opération modulo est très utile pour vérifier si un nombre est un multiple d'un autre. Par exemple, pour vérifier si 8 est un multiple de 2, on peut faire 8 % 2. Comme le résultat est zéro, alors 8 est un multiple de 2. Si on fait 7 % 2, le résultat est 1, donc 7 n'est pas un multiple de 2.

Division par zéro

Lorsque lors d'un calcul Python rencontre une division par zéro, il émet une erreur à la place de continuer le calcul. En effet, il est impossible de diviser un nombre par zéro et Python s'arrête immédiatement pour éviter de faire des calculs erronés. Testez le code suivant pour voir ce que cela donne :

1 // 0

Comparaisons

En plus des opérations listée en dessus, il est possible de comparer les nombres entre eux. Les opérations de comparaison sont listées dans le tableau ci-dessous. Chaque opération se fait entre deux nombres et donne un résultat qui est un booléen, c'est-à-dire une valeur vraie ou fausse. Pour représenter ces valeurs, Python utilise les mots-clés True et False.

Opérateur Signification Exemple Résultat
== Égalité 5 == 2 False
!= Inégalité 2 != 7 True
< Inférieur 1 < 2 True
> Supérieur 5 > 5 False
<= Inférieur ou égal 1 <= 8 True
>= Supérieur ou égal 8 >= 8 True

Fonctions sur les nombres

Python propose plusieurs fonctions qui permettent de manipuler les nombres. Les fonctions les plus courantes sont listées dans le tableau ci-dessous.

Fonction Signification Exemple Résultat
abs Valeur absolue abs(-5) 5
max Maximum max(2, 5) 5
min Minimum min(2, 5) 2

! Remarque

Les nombres à virgule flottante ont une précision limitée, ce qui peut amener à des résultats étranges, surtout lorsqu'on compare des nombres entre eux. Voyez plutôt :

print(0.1 + 0.2 == 0.3)

Le résultat est False alors que l'on pourrait penser que 0.1 + 0.2 est égal à 0.3. À cause des imprécisions de calcul, le résultat de l'addition de 0.1 et 0.2 est un nombre très proche de 0.3, mais pas tout à fait égal à 0.3.

Pour cette raison, on préférera utiliser des nombres entiers (ou d'autre représentation des nombres) lorsqu'on aura besoin de précision.

Les booléens

Comme mentionné précédemment, Python permet de représenter des valeurs de vérité et de les manipuler. Pour représenter le vrai on utilise le mot-clé True, alors qu'on utilise le mot-clé False pour représenter le faux.

! Remarque

Les valeurs True et False sont appelées des booléens en l'honneur de George Boole, un mathématicien anglais du XIXème siècle qui a largement contribué à la logique moderne.

Opérateur Signification Exemple Résultat
and Conjonction (ET) True and False False
or Disjonction (OU) True or False True
not Négation (NON) not True False

! Remarque

Les opérateurs booléens and et or sont calculés de manière particulière en Python. En Python, lorsque l'on utilise and dans un calcul, la valeur de gauche est calculée en premier. Si la valeur de gauche est False, alors le résultat est forcément False, dans ce cas, Python ne calcul pas même pas la valeur de droite. Ceci est une exception à la règle générale qui veut que les opérandes sont toujours calculés avant d'effectuer le calcul d'une opération. Par exemple, regardez le code suivant :

# La valeur de droite du and ici n'est pas calculée, # aucune erreur n'est levée car la division par 0 à droite # n'est pas calculée. print(False and 1 / 0 == 0) # La valeur de droite du and ici est calculée, # une erreur est donc levée à cause de la division par 0. print(True and 1 / 0 == 0)

De même, lorsque l'on utilise or dans un calcul, la valeur de gauche est toujours calculée en premier. Dans le cas où la valeur de gauche est True, alors le résultat est forcément True et Python ne calcul pas la valeur de droite.

Nous reparlerons de cette façon particulière de traiter les opérateurs and et or dans la suite du cours lorsque nous aborderons les instructions conditionnelles et les boucles.

! Remarque

En Python, pour des raisons historiques, les booléens sont aussi considérés comme des nombres entiers. En effet, True est égal à 1 et False est égal à 0, comme on peut le remarquer en exécutant le code ci-dessous.

print(True == 1) print(False == 0)

Comme Python considère les booléens comme des nombres entiers, peut utiliser tous les opérateurs arithmétiques sur les booléens. Cependant, on évitera de le faire lorsque cela nuira à la clarté du code.

Les chaînes de caractères

Une chaîne de caractères.

Une chaîne de caractères est une suite de caractères qui représente du texte. Pour noter une chaîne de caractères en Python, on utilise des guillemets simples ou doubles autour du texte.

Nous présentons ici quelques opérations de bases. Nous revisiterons les chaînes de caractères plus en détails dans la suite de ce chapitre.

print('Ceci est une chaîne de caractères.') print("Ceci est aussi une chaîne de caractères.")

! Remarque

Lorsque l'on veut utiliser des guillemets au sein d'une chaîne de caractères délimitée par les même guillemets, il faut échapper les guillemets en les précédant d'une barre oblique inversée \. On appelle ce caractère le caractère d'échappement.

print("Ceci est une chaîne de caractères contenant des \"guillemets\".")

De ce fait, pour écrire une barre oblique inversée dans une chaîne de caractères, il faut aussi échapper le caractère. Dans ce cas, il faudra donc écrire deux barres obliques inversées pour obtenir une unique barre oblique inversée dans une chaîne de caractères.

print("Ceci est une barre oblique inversée : \\.")

De même, pour entrer un saut de ligne dans une chaîne de caractères, on utilise la combinaison de caractères \n.

print("Ceci est\nune chaîne\nde caractères\nsur plusieurs\nlignes.")

Concaténation

Les chaînes de caractères peuvent être concaténées (mises bout à bout) à l'aide de l'opérateur +.

print("Ceci est une " + "chaîne de" + " caractères.")

Les chaînes de caractères peuvent être répétées à l'aide de l'opérateur * suivi du nombre de répétitions.

print("HA" * 10)

Longueur d'une chaîne de caractères

La fonction len permet de calculer la longueur d'une chaîne de caractères.

print(len("Ceci est une chaîne de 37 caractères."))

Comparaisons

Les opérateurs de comparaison (comme <, >, ==, etc.) peuvent aussi être utilisés avec les chaînes de caractères. Dans ce cas, les chaînes de caractères sont comparées en fonction de leur ordre alphabétique.

Entrée utilisateur

La fonction input permet de demander à l'utilisateur (la personne qui utilise le programme) d'entrer une chaîne de caractères. Lorsque la fonction input est appelée, le programme s'arrête, affiche la valeur donnée en argument à input et attend que l'utilisateur entre du texte, généralement au même endroit où les sorties du programme sont affichées. Lorsque l'utilisateur a fini d'entrer sa chaîne de caractères, il doit appuyer sur la touche Entrée pour valider l'entrée. Le programme reprend alors son exécution. La valeur entrée par l'utilisateur est alors utilisée comme la valeur de l'appel à la fonction input.

print("Votre nom est " + input("Quel est votre nom ? ") + ".")

Conversions entre types de données

Comme nous venons de le voir, il existe plusieurs types de données en Python. Chaque type de données a des opérations qui lui sont propres. Par exemple, l'opération + sur les nombres correspond à l'addition, alors que l'opération + sur les chaînes de caractères correspond à la concaténation. Lorsque l'on essaie d'utiliser une opération sur des type de données incompatibles, Python émet une erreur.

print(1 + 2) print("1" + "2") print(1 + "2")

Parfois, pour réaliser une opération, il sera nécessaire de convertir une donnée d'un type en une donnée d'un autre type. Le plus souvent, il s'agira de convertir une chaines de caractères en un nombre ou inversement. Le tableau suivant résume les fonctions de conversion.

Fonction de conversion Type de données obtenu
int Nombre entier
float Nombre à virgule
str Chaîne de caractères

Pour convertir une donnée d'un type en une donnée d'un autre type, on utilise la fonction de conversion correspondante.

print(int("1") + int("2")) print(float("3.25") + float("2.5")) print(str(1) + str(2)) print(int(1.98))

Parfois, la conversion est impossible. Dans ce cas, Python émet une erreur.

print(int("1.5"))

Conversion de type et entrées utilisateur

Lorsque l'on demande à l'utilisateur d'entrer une valeur, celle-ci est toujours une chaîne de caractères. Si l'on veut utiliser cette valeur comme un nombre, il faudra donc la convertir en nombre.

print("Dans 10 ans, vous aurez " + str(int(input("Quel âge avez-vous ? ")) + 10) + " ans.")

Auto-évaluation

En Python, la valeur 1 est , alors que la valeur "1" est .

Pour convertir une chaîne de caractères en nombre entier, on utilise la fonction . Au contraire, pour convertir un nombre en chaîne de caractères, on utilise la fonction .

Auto-évaluation

L'opération + sur les nombres correspond à alors que l'opération + sur les chaînes de caractères correspond à .

Auto-évaluation

Pour déterminer si un nombre est le multiple d'un autre, on utilise l'opérateur . En effet, lorsque l'on applique cet opérateur à deux nombres, on obtient lorsque le premier nombre est un multiple du second.

Auto-évaluation

En Python, il y a deux valeurs possibles pour les booléens : . Les opérations de comparaison renvoient toujours .

Dans cette section, nous avons vu différents types de données disponibles en Python et comment les utiliser. Nous aurons l'occasion de voir d'autres types de données, tels que les tuples, les listes et les dictionnaires d'ici la fin de ce chapitre.

Dans la section suivante, nous allons voir comment définir et utiliser des variables en Python.