Les types de base
Python a cinq types fondamentaux :
str: du texte :"Bonjour"ou'Salut'int: un nombre entier :42,-7float: un nombre décimal :3.14,-0.5bool: 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 :
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,-7float— decimal number:3.14,-0.5bool— 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:
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
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
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 ?
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
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")
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
Sans remonter dans la leçon : comment écrit-on une f-string pour insérer la variable nom, et que renvoie input() ?
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().True en Python ?nom dans une chaîne de caractères ?input() en Python ?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 →