Tom Daluzeau
← Parcours Python
Python · leçon 1 / 5Ch. 1 · Bases11 minTerminée

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.

8 0 0 1 " " str : 4 caractères == 8001 int : un nombre False aucun message 1 " " str + 1 int TypeError le script s'arrête
Un str et un int ne se mélangent pas : == répond False en silence, + plante.

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.

Sans = : le nombre est perdu int(port) "8001" str 8001 int int() port Avec = : port change de valeur port = int(port) "8001" str 8001 int int() port aucune étiquette sur 8001 port + 1 donne 8002
int() fabrique une nouvelle valeur. Seul = pose l'étiquette port dessus.

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.

not x est vrai : vide ou zéro 0 "" [] {} x is None None tout le reste est vrai "0" [0] 80 ni vide, ni zéro 0 est faux, mais c'est une vraie valeur : ce n'est pas None
not x est vrai pour les cinq valeurs de gauche. x is None n'est vrai que pour None.

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 :

  • print accepte des types différents. print("web-1", 8001) marche, alors que "web-1" + 8001 lève TypeError.
  • Chaque argument est calculé avant l’affichage : print("port", 80 + 1) affiche port 81.

À retenir

  • Les guillemets font le type : "8001" est un str, 8001 est un int.
  • Python ne convertit jamais tout seul : "8001" == 8001 vaut False, "1" + 1 lève TypeError.
  • int() et str() fabriquent une nouvelle valeur. Seul = change une variable.
  • Valeurs fausses : 0, "", [], {}, None. Ce qui est vide ou zéro est faux.
  • Pour None, toujours is None. not x est vrai aussi pour 0 et pour ce qui est vide.
  • print("web-1", 8001) affiche web-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.

Cartes · 12

Réviser les cartes ici

Espace : retourner