1.1Variables, types & opérateurs
L'essentiel en 30 secondes
- Variable = étiquette sur un objet : age = 30 — Python déduit le type (int, float, str, bool), et = copie l'étiquette, pas toujours l'objet.
- Typage fort : convertir explicitement : "3" + 4 refuse — passer par int(), float(), str(), et convertir le texte de input() avant tout calcul.
- = assigne, == compare, is identifie : / donne un float, // le quotient entier, % le reste, ** la puissance.
Mini-cas filé — Nabil, data analyst junior à Alger
Nabil, data analyst junior à Alger, prépare un nettoyage de données d'enquête : il stocke le nom du répondant, son âge et sa taille dans des variables claires, puis calcule l'année de naissance à partir d'un âge saisi. Pressé, il écrit print("J'ai " + age) et additionne le texte renvoyé par input() à un nombre : TypeError, puis total faux. Il corrige avec une f-string et int() : l'âge devient un vrai nombre, le rapport s'affiche correctement. En bonus, il découvre que a = b = [] partage une seule liste — il copiera désormais avec list().
Ce même cas revient dans le cours, le schéma, le script et le défi 48h — et continue en 1.2, 1.3, 1.4 et 1.5.
1. Variables-étiquettes & types
Une variable est une étiquette posée sur une valeur : age = 30 colle l'étiquette « age » sur l'objet 30. Python a un typage dynamique (pas de déclaration préalable) mais fort : "3" + 4 lève une erreur au lieu de convertir en silence. Quatre types de base : int (entier), float (décimal), str (texte, immuable), bool (True/False, qui pilote les conditions). type() révèle le type ; nommez en snake_case explicite (age_repondant plutôt que x).
Nabil stocke nom = "Yasmine", age = 30, taille = 1.70 : des étiquettes qui disent ce qu'elles portent, relues sans effort quand le chef demande le rapport.
2. Conversions, input() et opérateurs
On change de type explicitement : int("30"), float("3.5"), str(30). Crucial : input() renvoie TOUJOURS du texte — convertir avec int() ou float() avant de calculer. Opérateurs : / divise en float (7/2 = 3.5), // quotient entier (3), % reste (7%2 = 1), ** puissance. Et = assigne pendant que == compare (is teste l'identité) : confondre les deux dans un test est le bug n°1.
Nabil remplace sa concaténation fautive par f"J'ai {age} ans" et convertit la saisie avec int(input(...)) : l'année de naissance devient juste, et l'erreur de type disparaît.
🔎 Exemple concret — 🔎 Exemple concret — Le piège des deux étiquettes
Comprendre l'affectation, comme Nabil sur ses listes.
a = []
b = a # meme objet !
a.append(1)
print(b) # [1] : une seule liste
b = a.copy() # vraie copie independante
print("3" + str(4)) # "34" : conversion explicite
print(7 // 2, 7 % 2, 2 ** 10) # 3 1 1024
Lecture : = copie l'étiquette, pas l'objet — .copy() crée une liste indépendante ; str() rend la concaténation possible.
Leçon : is teste l'identité, == l'égalité ; //, % et ** ont chacun leur rôle.
Vocabulaire de la section
- Variable
- Nom qui référence une valeur en mémoire (une étiquette sur un objet). Assignation avec = : ma_var = valeur.
Exemple simple : Le nom et l'age stockés par Nabil pour son enquête.
Ce que ce n'est pas : une boîte qui contiendrait une copie à chaque affectation.
Réflexe : penser étiquette, nommer en snake_case explicite.
- int / float
- Nombres entiers (int : 30) et à virgule (float : 3.14). La division / donne toujours un float ; // donne le quotient entier.
Exemple simple : L'age (int) et la taille (float) des répondants de Nabil.
Ce que ce n'est pas : attendre 3 de 10 / 3 (c'est 3.333, un float).
Réflexe : / pour le réel, // pour le quotient, % pour le reste.
- str (chaîne)
- Texte entre guillemets simples ou doubles : "Bonjour". Immuable (non modifiable en place) ; s'assemble avec les f-strings.
Exemple simple : Le nom du répondant affiché par Nabil en f-string.
Ce que ce n'est pas : additionner "3" + 4 sans conversion.
Réflexe : texte + nombre = convertir d'abord (ou f-string).
- bool
- Booléen : True ou False. Résultat des comparaisons, base des conditions du chapitre suivant.
Exemple simple : Le majeur = age >= 18 calculé par Nabil.
Ce que ce n'est pas : confondre = (assignation) et == (comparaison).
Réflexe : = assigne, == compare, is identifie.
- Conversion (casting)
- Changer de type explicitement : int("30") donne 30 ; str(30) donne "30". Indispensable car input() renvoie toujours du texte.
Exemple simple : La saisie d'age convertie par Nabil avec int().
Ce que ce n'est pas : calculer directement sur le texte de input().
Réflexe : input() = texte : int() ou float() avant de calculer.
En pratique — En pratique — Manipuler variables, types et conversions
- Créez des variables de chaque type : nom = "Ada", age = 30, taille = 1.70, majeur = True. Affichez chacune avec print() et son type avec type(variable).
- Testez les opérateurs : 7 // 2 (division entière), 7 % 2 (reste/modulo), 2 ** 10 (puissance). Prévoyez le résultat avant d'exécuter.
- Provoquez l'erreur classique : print("J'ai " + age) → TypeError. Corrigez avec une f-string : print(f"J'ai {age} ans").
- Demandez l'âge avec input(), convertissez-le en nombre (int(...)) et calculez l'année de naissance : constatez pourquoi la conversion est indispensable.
Script prêt à dire — justifier la conversion explicite (30 s)
« input() renvoie toujours du texte, donc je convertis avec int() avant de calculer : sinon on additionne du texte et un nombre et ça plante — ou pire, ça donne un résultat faux. La conversion explicite rend l'intention visible et le calcul fiable. »
À dire en revue de code ; montrer le TypeError avant/après.
Modèle copier-coller — variables, f-string et conversion input()
nom = "Nabil"
age = 30
taille = 1.70
majeur = age >= 18
print(f"{nom} a {age} ans, majeur : {majeur}")
print(type(taille)) #
age_saisi = int(input("Age ? "))
annee_naissance = 2026 - age_saisi
print(f"Annee de naissance : {annee_naissance}")
print(7 // 2, 7 % 2, 2 ** 10)
Enquête à Alger
Comme Nabil : variables nommées par répondant, f-string pour le rapport — le chef relit un tableau net, sans TypeError.
Saisie à convertir
Tout input() passe par int() ou float() avant calcul : l'année de naissance est juste, le total aussi.
Opérateurs ciblés
// pour les quotas entiers, % pour les restes, ** pour les projections — chacun son opérateur, aucun bricolage.
Doute sur un alias
Un type(obj) ou un test is tranche : l'étiquette se vérifie, elle ne se devine pas — copier avec list() si besoin.
✓ Bonnes pratiques
- Penser étiquette, pas boîte — et nommer en snake_case explicite.
- Convertir explicitement (int/float/str), surtout le texte de input().
- Distinguer = (assigne), == (compare) et is (identifie).
✗ Pièges fréquents
- Écrire a = b = [] puis être surpris que les deux bougent ensemble.
- Additionner "3" + 4 sans conversion (TypeError).
- Utiliser = dans un if au lieu de ==.
Points clés à retenir
- Une variable est un nom posé sur une valeur (nom = valeur) ; Python déduit le type (dynamique) mais ne mélange pas les types tout seul (fort).
- Quatre types de base : int, float, str, bool — type() révèle, int()/str() convertissent.
- input() renvoie TOUJOURS du texte : convertir avec int() ou float() pour calculer.
- Opérateurs utiles : // (division entière), % (modulo), ** (puissance) ; = assigne, == compare, is identifie.
Défi 48h — appliquez demain
Reprenez un de vos scripts (modèle ci-dessus) : convertissez chaque input() en int()/float(), remplacez chaque concaténation + entre texte et nombre par une f-string, et renommez une variable cryptique en snake_case. Exécutez et vérifiez l'affichage. 20 minutes suffisent.
- Je peux expliquer l'étiquette, le typage fort et la conversion explicite.
- Je convertis input() en nombre avant tout calcul.
- Je choisis //, % et ** sans hésiter, et je distingue = de ==.
Questions fréquentes
Pourquoi 10 / 3 donne 3.333 et pas 3 ?
En Python 3, l'opérateur / effectue toujours une division « réelle » et renvoie un float. Pour obtenir le quotient entier (3), utilisez la division entière // ; pour le reste, le modulo %. C'est un choix assumé du langage : la division exacte par défaut, l'entier sur demande explicite.
Quelle différence entre = et == ?
Un seul = assigne une valeur à une variable (x = 5). Le double == compare deux valeurs et renvoie True ou False (x == 5). Les confondre est une erreur très fréquente au début — et is teste l'identité (même objet), pas seulement l'égalité.
Que renvoie toujours la fonction input() ?