Types et conversions : str, int, float, bool, None
Reconnaître le type d'une valeur, savoir quand convertir avec int() et str(), et ne plus confondre « vide », « zéro » et « pas de valeur ».
Mis à jour le
Pourquoi on voit ça
Un script DevOps manipule des valeurs qui viennent d’ailleurs : un port tapé au clavier, une ligne d’un fichier texte, un argument de commande. Tout cela arrive sous forme de texte. Si tu compares ce texte à un nombre sans le convertir, Python ne plante pas : il répond False, et ton script prend la mauvaise branche sans rien dire.
Au contrôle, on te donne un extrait de code et tu dois dire ce qu’il affiche, sans machine. Beaucoup de pièges reposent sur le type d’une valeur. Savoir lire un type d’un coup d’œil est donc la première chose à maîtriser.
Les cinq types de base
| Type | Ce que c’est | Exemple |
|---|---|---|
str |
du texte, entre guillemets | "web-1", "8001" |
int |
un nombre entier | 8001, 0 |
float |
un nombre à virgule (avec un point) | 0.5, 80.0 |
bool |
vrai ou faux | True, False |
None |
l’absence de valeur | None |
Le réflexe à prendre : les guillemets font le type. "8001" est un texte de quatre caractères. 8001 est un nombre. À l’écran, les deux s’affichent pareil, mais pour Python ce sont deux choses différentes.
print(type("8001"))
print(type(8001))
<class 'str'>
<class 'int'>
Python ne convertit jamais tout seul
Python a un typage fort : il ne transforme jamais un texte en nombre (ou l’inverse) à ta place. Deux conséquences à connaître par cœur.
Comparer un str et un int donne False, sans erreur.
print("8001" == 8001)
False
Additionner un str et un int plante.
print("1" + 1)
TypeError: can only concatenate str (not "int") to str
La comparaison est la plus dangereuse des deux : aucun message, juste un False silencieux. C’est le bug classique du port lu dans un fichier et comparé à un nombre.
Convertir : int() et str()
C’est à toi de convertir, avec le nom du type voulu.
| Appel | Résultat | Usage |
|---|---|---|
int("8001") |
8001 |
calculer ou comparer avec un nombre |
str(8001) |
"8001" |
coller un nombre à du texte |
int("abc") |
ValueError |
le texte ne ressemble pas à un entier |
print(int("8001") + 1)
print("web-" + str(1))
8002
web-1
int() ne change pas la variable
int(port) fabrique un nombre et te le donne. Il ne touche pas à port. Si tu ne ranges pas le résultat quelque part, il est perdu.
port = "8001"
int(port)
print(type(port))
<class 'str'>
Pour que port devienne un nombre, il faut le signe = :
port = "8001"
port = int(port)
print(port + 1)
8002
Retiens la phrase : seul = change une variable.
Vrai ou faux : les valeurs fausses
Dans un if, tu peux mettre n’importe quelle valeur, pas seulement un bool. Python la traite comme vraie ou fausse. Cinq valeurs de base comptent comme fausses :
| Valeur | Ce que c’est |
|---|---|
0 |
le nombre zéro |
"" |
le texte vide |
[] |
la liste vide |
{} |
le dictionnaire vide |
None |
pas de valeur |
Le résumé : ce qui est vide ou zéro est faux. Tout le reste est vrai. C’est ce qui permet d’écrire un test très court :
servers = []
if not servers:
print("aucun serveur")
aucun serveur
Attention au piège : "0" est un texte d’un caractère. Il n’est pas vide, donc il est vrai. Même chose pour " " (une espace) ou [0] (une liste qui contient un élément).
None et is None
None veut dire « il n’y a pas de valeur ». Par exemple : un serveur sans propriétaire connu.
Pour tester None, la règle du cours est simple : toujours is None, jamais == None.
owner = None
if owner is None:
print("pas de propriétaire")
pas de propriétaire
not x et x is None ne posent pas la même question
| Test | Question posée | Vrai pour |
|---|---|---|
not x |
« vide ou zéro ? » | 0, "", [], {}, None |
x is None |
« pas de valeur du tout ? » | None seulement |
x = 0
print(not x)
print(x is None)
True
False
0 est une vraie valeur : un compteur à zéro, zéro erreur, zéro seconde d’attente. Si tu écris if not retries: pour dire « le réglage est absent », tu traites aussi le cas retries = 0 comme absent. Quand tu veux dire « absent », écris is None.
print et ses arguments
print accepte plusieurs arguments, séparés par des virgules. Il les affiche l’un après l’autre avec une espace entre eux. La virgule, elle, ne s’affiche pas.
print("web-1", 8001)
web-1 8001
Deux choses à remarquer :
printaccepte des types différents.print("web-1", 8001)marche, alors que"web-1" + 8001lèveTypeError.- Chaque argument est calculé avant l’affichage :
print("port", 80 + 1)afficheport 81.
À retenir
- Les guillemets font le type :
"8001"est unstr,8001est unint. - Python ne convertit jamais tout seul :
"8001" == 8001vautFalse,"1" + 1lèveTypeError. int()etstr()fabriquent une nouvelle valeur. Seul=change une variable.- Valeurs fausses :
0,"",[],{},None. Ce qui est vide ou zéro est faux. - Pour
None, toujoursis None.not xest vrai aussi pour0et pour ce qui est vide. print("web-1", 8001)afficheweb-1 8001: une espace entre les arguments.
Entraînement
12 questions, dont 3 à compléter. Tu réponds, on passe à la suivante. La note arrive à la fin.
Ta note
Cartes · 12
Réviser les cartes ici
Pourquoi