1.1 · Variables, types & opérateurs

Niveau 1 · Bases du langage

1.1Variables, types & opérateurs

Objectif : manipuler nombres, chaînes, booléens et conversions de types, et utiliser les opérateurs arithmétiques et de comparaison sans les confondre.
Temps estimé : 14 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

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.

Erreur d'interprétation fréquente : « = copie la valeur » ou « Python convertit tout seul ». Non. = colle une étiquette : a = b = [] puis a.append(1) modifie aussi b — deux étiquettes, un seul objet (copier avec list() ou .copy()). Et Python ne mélange pas texte et nombre tout seul : "3" + 4 lève TypeError — c'est à vous de convertir explicitement avec int(), float() ou str().
Variables & types Nommer, typer, calculer Étiquette (=) Un nomposé sur un objetTypes (forts) int, float,str, bool + conversionsOpérateurs (= vs ==) Assigne,compare, identifie (is)
Nommer, typer, calculer
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) Nommer : Nabil colle des étiquettes explicites en snake_case sur chaque valeur — Python déduit le type, type() vérifie. 2) Convertir : le texte de input() passe par int() avant tout calcul, les f-strings assemblent sans erreur de type. 3) Calculer : / en float, // entier, % reste, ** puissance ; = assigne, == compare, is identifie. Leçon : étiquette + conversion explicite + bon opérateur, et les bases ne mentent plus.

🔎 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

  1. 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).
  2. 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.
  3. Provoquez l'erreur classique : print("J'ai " + age) → TypeError. Corrigez avec une f-string : print(f"J'ai {age} ans").
  4. Demandez l'âge avec input(), convertissez-le en nombre (int(...)) et calculez l'année de naissance : constatez pourquoi la conversion est indispensable.
Vous créez des variables, reconnaissez leur type et convertissez proprement — notamment le texte renvoyé par input() en nombre.

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.

Checklist sortie de section
  • 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 ==.
Auto-évaluation 1-5 : est-ce que je convertis explicitement plutôt que de subir le TypeError ?est-ce que mes variables sont nommées clairement en snake_case ?

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é.

Vérifiez votre compréhension

Que renvoie toujours la fonction input() ?

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 1Questions inédites et durcies pour valider vos acquis