Types de données
Identifiez les types fondamentaux de Python, int, float, str, bool, et comprenez ce que chacun représente.
- Identifier les valeurs int, float, str et bool
- Utiliser type() pour vérifier le type d'une valeur
- Comprendre le typage dynamique en Python
- Reconnaître les valeurs vraies et fausses
L’ensemble auquel appartient un nombre
Répondez à deux questions : vous tenez pommes et vous en coupez une en deux. Tenez-vous maintenant pommes au même sens que vous teniez ? Une demi-pomme n’est pas un nombre entier de pommes, le vit dans , et le vit dans .
Un mathématicien répond en demandant à quel ensemble une valeur appartient. La même distinction poursuit chaque programme : la machine stocke différemment de , et différemment de "42". Le mot que Python emploie pour « dans quel ensemble vit cette valeur » est type.
Alors : combien d’ensembles vaut-il la peine de distinguer ? Quatre, pour commencer.
| Type | Ce que c’est, mathématiquement | Exemples |
|---|---|---|
int | , les entiers, stockés exactement | 42, -7 |
float | , approché avec un nombre fixe de chiffres binaires | 3.14, -0.5 |
str | une séquence finie de caractères | "hello" |
bool | True, False |
La ligne float contient une réserve délibérée, approché. Un entier est stocké exactement, à chaque fois. Un nombre réel, presque jamais : comment stockeriez-vous avec un nombre fini de chiffres ? Impossible, donc Python conserve une approximation finie, et les comptes divergent sur les derniers chiffres. Ce seul fait explique une surprise célèbre que vous allez bientôt rencontrer.
Demander l’ensemble d’appartenance
Devant une valeur, vous pouvez demander son type directement :
type(42) # <class 'int'>
type(3.14) # <class 'float'>
type("hi") # <class 'str'>
type(True) # <class 'bool'>Deux remarques de notation. D’abord, type(...) est une fonction, vous lui confiez une valeur et elle vous rend l’objet de type auquel cette valeur appartient. Ensuite, la réponse s’affiche <class 'int'> ; le mot class est le terme de Python pour type, et le mot entre guillemets est le nom de l’ensemble. Lisez <class 'float'> comme « appartient à l’ensemble float ».
Un nom ne s’engage pas envers un ensemble
C’est ici que les dividendes commencent. Dans un langage à typage statique, vous déclareriez à l’avance : x est un entier. Python, lui, laisse un nom pointer où il veut :
x = 5
print(type(x)) # <class 'int'>
x = "hello"
print(type(x)) # <class 'str'>Rediriger un nom vers un autre ensemble est légal, si bien que le type de x ne se lit dans aucune déclaration, seulement en demandant envers quoi il pointe actuellement. C’est le typage dynamique. C’est commode, et c’est aussi la raison pour laquelle votre programme peut silencieusement confier une chaîne à une fonction qui attend des nombres : rien ne l’en empêche jusqu’à ce que l’opération elle-même échoue.
Quelles valeurs se comportent comme True ?
Toute valeur est vraie ou fausse (truthy / falsy), ou bien elle se comporte comme True dans une condition, ou bien comme False. La règle est compacte, et il vaut la peine de la vérifier :
- Falsy : le , le , la chaîne vide
""etNone - Truthy : tout le reste
bool(0) # False
bool(1) # True
bool(-1) # True — tout nombre non nul est truthy
bool("") # False
bool("hello") # True — toute chaîne non vide est truthyObservez ce qui est dans la liste et ce qui en est exclu. -1 est True ; 0 ne l’est pas. La chaîne "0" est True, elle est non vide, et pour les chaînes le critère est la vacuité, pas la valeur de leur contenu. Cette règle se rembourse dès votre premier if : if score: signifie si score n’est pas nul.
Un exemple travaillé : auditer une expression
Les ensembles paient dès qu’une expression les mélange. Lisez le reçu ligne par ligne et demandez l’ensemble de chaque résultat :
unit_price = 4.75
quantity = 4
bill = unit_price * quantity # float : le float absorbe l'int
type(bill) # <class 'float'>
bool(bill) # True — tout non-nul est truthy
type(10 / 2) # <class 'float'> — la division réelle ne rend jamais intLisez bill comme le produit de deux ensembles distincts. Les ensembles ne se « mélangent » pas, le float l’emporte, car la proportion n’est un nombre entier d’aucune échelle et l’ensemble le plus large doit la contenir. L’habitude d’audit consiste à demander directement à l’ensemble : type(...) confirme ce que vous soupçonniez au lieu de parier sur la chance.
Pièges courants
4 / 2vaut2.0, pas2. La division réelle (/) renvoie toujours unfloaten Python 3, même quand la division est exacte. Pour un résultat entier, demandez la division entière :4 // 2→2.True + Truevaut2.boolest une sous-classe deinten Python :Truese comporte comme etFalsecomme en arithmétique. Les deux ensembles se recouvrent, maistype(True)répond toujoursbool.type()indique le type concret.type(True)estbool, pasint, si à l’aise queTruesoit dans les sommes.type()décrit le résultat, pas les opérandes.type(2 * 3.0)estfloat, unintmultiplié par unfloatvit dans l’ensemblefloat. Ne le prédisez pas à partir des pièces ; demandez à la réponse.
🧩 Défis
🧩 Défi, réfléchissez d'abord, puis révélez
Prédisez type(7 / 2), puis vérifiez.
💡 Réponse : type(7 / 2) est float, la division réelle (/) produit toujours un float en Python 3, même quand les deux opérandes sont des entiers et que le quotient est un nombre entier.
🧩 Défi, réfléchissez d'abord, puis révélez
Prédisez bool(0), bool(0.0), bool("") et bool("0"). Lesquelles sont vraies, lesquelles fausses ?
💡 Réponse : bool(0) → False, bool(0.0) → False, bool("") → False (chaîne vide), bool("0") → True (chaîne non vide, même si son contenu est le caractère « 0 »).
🧩 Défi, réfléchissez d'abord, puis révélez
En Python, 0.1 + 0.2 n’est pas égal à 0.3. Voici le même problème sur papier : que se passe-t-il quand vous représentez avec deux décimales ? Expliquez maintenant pourquoi un float, qui approche avec un nombre fini de chiffres binaires, ne peut pas représenter exactement.
💡 Réponse : Avec deux décimales, le $1/3$ doit devenir $0.33$, une perte déjà actée avant tout calcul. De même, $0.1$ n'a pas de forme binaire exacte ; le float stocke une valeur proche, et additionner deux de ces valeurs traîne de minuscules erreurs : 0.1 + 0.2 donne 0.30000000000000004, pas 0.3. Précision finie, pas un bug de Python.
🤔 Questions socratiques
- Si
bool(-1)estTrue, quelle règle unique explique que soit vrai mais faux ? La règle se généralise-t-elle des nombres aux chaînes ? - Python possède
isinstance(42, int)qui renvoieTrue.isinstanceserait-il plus fiable quetype(x) == intpour vérifier des types ? Pourquoi ? - Pourquoi Python écrit-il
TrueetFalseen majuscules plutôt quetrueetfalse? Quels autres mots en majuscules Python réserve-t-il ?
✅ Vérification rapide
1. Quel est le type de 3.14 ?
2. Quel est le résultat de True + True ?
3. Laquelle de ces valeurs est fausse (falsy) ?