Leçon 2/9 7 min

Variables et types

Maîtrisez str, int, float, bool, les f-strings et les conversions de types en Python.

Les types de base

Python a cinq types fondamentaux :

  • str : du texte : "Bonjour" ou 'Salut'
  • int : un nombre entier : 42, -7
  • float : un nombre décimal : 3.14, -0.5
  • bool : vrai ou faux : True, False (avec majuscule !)
  • None : « rien, pas de valeur »

La fonction type() te dit le type d'une valeur :

print(type("Bonjour"))  # <class 'str'>
print(type(42))         # <class 'int'>
print(type(3.14))       # <class 'float'>
print(type(True))       # <class 'bool'>
print(type(None))       # <class 'NoneType'>

f-strings : le format moderne

Les f-strings (Python 3.6+) sont la façon la plus pratique d'insérer des variables dans du texte :

nom = "Alice"
age = 25

# f-string : f devant les guillemets
print(f"Bonjour {nom}, vous avez {age} ans")
# Bonjour Alice, vous avez 25 ans

# On peut même faire des calculs
print(f"L'année prochaine, {nom} aura {age + 1} ans")
# L'année prochaine, Alice aura 26 ans

L'ancienne manière avec + (concaténation) fonctionne mais est moins lisible :

# Ancien style (à éviter)
print("Bonjour " + nom + ", vous avez " + str(age) + " ans")

Conversion de types

Parfois il faut convertir un type en un autre. Python fournit des fonctions simples :

Prédisez avant de lire

age = "25" (une chaîne, comme celle que renvoie input()). Avant de dérouler : que produit age + 1 ? Et int(age) + 1 ? Pourquoi Python ne devine-t-il pas le type tout seul ?

Voir la réponse

age + 1 lève une TypeError : can only concatenate str (not "int") to str. Python refuse d'additionner une chaîne et un entier et ne convertit rien automatiquement (contrairement à JavaScript). int(age) + 1 vaut 26 : la conversion explicite est obligatoire. C'est le piège n°1 du débutant, surtout avec input() qui renvoie toujours une chaîne. La solution : int(), float() ou str() selon le besoin.

# String vers nombre
prix = "49.99"
prix_num = float(prix)      # 49.99
quantite = "3"
quantite_num = int(quantite) # 3

# Nombre vers string
age = 25
texte = str(age)            # "25"

# Calcul
total = prix_num * quantite_num
print(f"Total : {total} €")  # Total : 149.97 €

Erreur fréquente : int("3.14") plante ! Il faut d'abord passer par float(), puis int() si on veut un entier.

input() : demander une saisie

input() affiche un message et attend que l'utilisateur tape quelque chose :

nom = input("Comment vous appelez-vous ? ")
print(f"Bienvenue, {nom} !")

age = input("Quel âge avez-vous ? ")
age = int(age)  # input() renvoie TOUJOURS un string
print(f"Dans 10 ans, vous aurez {age + 10} ans")

Résultat (si l'utilisateur tape "Alice" puis "25") :

Comment vous appelez-vous ? Alice
Bienvenue, Alice !
Quel âge avez-vous ? 25
Dans 10 ans, vous aurez 35 ans

Piège classique : input() renvoie toujours un str. Si tu oublies int(), le calcul "25" + 10 provoque une erreur TypeError.

Basic types

Python has five fundamental types:

  • str — text: "Hello" or 'Hi'
  • int — whole number: 42, -7
  • float — decimal number: 3.14, -0.5
  • bool — true or false: True, False (capitalized!)
  • None — "nothing, no value"

The type() function tells you the type of a value:

print(type("Hello"))  # <class 'str'>
print(type(42))       # <class 'int'>
print(type(3.14))     # <class 'float'>
print(type(True))     # <class 'bool'>
print(type(None))     # <class 'NoneType'>

f-strings — the modern format

f-strings (Python 3.6+) are the most practical way to insert variables into text:

name = "Alice"
age = 25

# f-string: f before the quotes
print(f"Hello {name}, you are {age} years old")
# Hello Alice, you are 25 years old

# You can even do calculations
print(f"Next year, {name} will be {age + 1}")
# Next year, Alice will be 26

The old way with + (concatenation) works but is less readable:

# Old style (avoid)
print("Hello " + name + ", you are " + str(age) + " years old")

Type conversion

Sometimes you need to convert one type to another. Python provides simple functions:

Predict before reading

age = "25" (a string, like the one input() returns). Before scrolling down: what does age + 1 produce? And int(age) + 1? Why doesn't Python figure out the type on its own?

See the answer

age + 1 raises a TypeError: can only concatenate str (not "int") to str. Python refuses to add a string and an integer and converts nothing automatically (unlike JavaScript). int(age) + 1 returns 26: explicit conversion is required. This is the number-one beginner trap, especially with input() which always returns a string. The fix: use int(), float(), or str() as needed.

# String to number
price = "49.99"
price_num = float(price)      # 49.99
quantity = "3"
quantity_num = int(quantity)   # 3

# Number to string
age = 25
text = str(age)               # "25"

# Calculation
total = price_num * quantity_num
print(f"Total: {total} EUR")  # Total: 149.97 EUR

Common error: int("3.14") crashes! You need to use float() first, then int() if you want a whole number.

input() — asking for user input

input() displays a message and waits for the user to type something:

name = input("What is your name? ")
print(f"Welcome, {name}!")

age = input("How old are you? ")
age = int(age)  # input() ALWAYS returns a string
print(f"In 10 years, you will be {age + 10}")

Result (if the user types "Alice" then "25"):

What is your name? Alice
Welcome, Alice!
How old are you? 25
In 10 years, you will be 35

Classic trap: input() always returns a str. If you forget int(), the calculation "25" + 10 triggers a TypeError.

🎯 Pratique

S'entraîner (clique pour ouvrir) :

Prompt IA
Avec l'IA

Copiez ce prompt dans Claude ou ChatGPT :

Écris un script Python qui demande le prénom et l'âge de l'utilisateur, puis affiche un message personnalisé avec une f-string. Ajoute une gestion d'erreur si l'âge n'est pas un nombre.
💬 Ré-explique sans regarder
Ré-explique sans regarder

Sans relire la réponse de l'IA : pourquoi le script doit-il convertir l'âge avec int() avant de l'additionner, et qu'est-ce que input() renvoie toujours ?

Une bonne explication dit : input() renvoie toujours un str, même si l'utilisateur tape un nombre (on récupère la chaîne "25", pas l'entier 25). Faire "25" + 10 lève alors une TypeError. Il faut donc convertir avec int() (ou float()) avant tout calcul, d'où la gestion d'erreur si la saisie n'est pas un nombre.
⚖️ Juge le code de l'IA
Accepter ou rejeter le code de l'IA

L'IA te propose ce code pour calculer l'âge dans 10 ans. Ton rôle de relecteur : l'accepter tel quel ou le rejeter, et dire pourquoi.

age = input("Quel âge avez-vous ? ")
print(f"Dans 10 ans, vous aurez {age + 10} ans")
À rejeter : ce code plante. input() renvoie un str, donc age vaut la chaîne "25" et age + 10 lève une TypeError (on ne peut pas additionner un str et un int). Le correctif : convertir d'abord avec age = int(age), puis calculer age + 10. C'est le piège n°1 de input().
🧠 Rappel libre
Rappel libre

Sans remonter dans la leçon : comment écrit-on une f-string pour insérer la variable nom, et que renvoie input() ?

Une f-string s'écrit avec un f devant les guillemets et la variable entre accolades : f"Bonjour {nom}" (on peut même y mettre un calcul, ex. {age + 1}). input() renvoie toujours un str : pour calculer dessus, il faut le convertir avec int() ou float().
Quel est le type de True en Python ?
Comment insérer une variable nom dans une chaîne de caractères ?
Que renvoie input() en Python ?
Prochaine étape

Une variable ne retient qu'une seule valeur à la fois. Pour gérer plusieurs éléments d'un coup, on passe aux listes et aux dictionnaires, avec le slicing et les list comprehensions.

Leçon 3 : Conditions et boucles →

Une erreur dans cette leçon, un passage flou, une question ? Écrivez-moi : chaque retour améliore ce cours.

Besoin d'un développeur pour votre projet ?

Réponse sous 24h · Sans engagement