Aller au contenu principal

Variables

Progression

#Variables et types

Les variables permettent de nommer des valeurs pour les réutiliser et les composer dans vos programmes. En Python, un nom de variable référence un objet qui contient à la fois une valeur et un type, plutôt qu'un emplacement mémoire fixe comme dans d'autres langages. Cette distinction a des conséquences importantes sur la mutabilité, la différence entre identité et égalité, et la portée des noms selon la règle LEGB.

Objectifs d'apprentissage

  • Comprendre que les noms référencent des objets (valeurs + types) plutôt que des emplacements mémoire fixes.
  • Manipuler les types de base (nombres, chaînes, booléens) et effectuer des conversions simples entre eux.
  • Expliquer la résolution des noms selon la règle LEGB et éviter les pièges courants liés aux portées.
pythonpython
1x = 32y = 2.53nom = "Ada"4vrai = True5print(x + y, nom.upper(), vrai)

Les noms de variables doivent être explicites et suivre la convention snake_case en Python. Il est important de comprendre que les affectations lient un nom à une valeur plutôt qu'à un emplacement mémoire : l'instruction a = b copie une référence vers l'objet, pas l'objet lui-même.

#Identité vs égalité, mutabilité

Python distingue l'égalité de valeurs et l'identité d'objets. L'opérateur == compare les valeurs de deux objets, tandis que l'opérateur is vérifie s'il s'agit du même objet en mémoire (même adresse logique).

Les types se divisent en deux catégories : les types immuables comme int, str et tuple ne peuvent pas être modifiés une fois créés, et toute opération crée un nouvel objet. À l'inverse, les types mutables comme list, dict et set peuvent être modifiés en place, ce qui peut créer des effets de bord si plusieurs noms référencent le même objet.

pythonpython
1xs = [1,2]; ys = xs2ys.append(3)3print(xs)  # [1, 2, 3] (même objet)

#Portée des noms (LEGB)

La résolution des noms en Python suit la règle LEGB : Local, Enclosing, Global, Builtins. Python cherche d'abord dans la portée locale (variables de la fonction courante), puis dans les portées englobantes (closures), ensuite dans la portée globale (module), et enfin dans les noms intégrés. Il est recommandé d'éviter les mots-clés global et nonlocal sauf dans des cas pédagogiques spécifiques, et de privilégier le retour de valeurs explicites.

#Nombres et opérateurs

Python propose des opérateurs arithmétiques standard pour manipuler les nombres : addition +, soustraction -, multiplication *, division /, division entière //, modulo %, et exponentiation **. Les opérateurs de comparaison incluent ==, !=, <, <=, >, >=, tandis que les opérateurs logiques sont and, or et not.

pythonpython
1a, b = 7, 32print(a // b, a % b, a ** b)

#Chaînes de caractères

Les chaînes de caractères peuvent être concaténées avec l'opérateur +, mais l'interpolation avec les f-strings (f"{variable}") est généralement plus lisible et performante. Python offre de nombreuses méthodes utiles pour manipuler les chaînes : .strip() retire les espaces en début et fin, .split() découpe une chaîne en liste, et .join() assemble une liste en chaîne.

pythonpython
1prenom, age = 'Ada', 362msg = f"{prenom} a {age} ans"3print(msg, msg.split())

#Playground

Chargement de l’éditeur...

#Exercices

Ces exercices vous permettront de pratiquer la manipulation des types de base et des conversions :

  • Écrivez un programme qui convertit un nombre de secondes en format HH:MM:SS.
  • Demandez un nom à l'utilisateur et affichez un message de bienvenue en majuscules.
  • Calculez l'IMC (Indice de Masse Corporelle) à partir d'un poids et d'une taille saisis, puis affichez la catégorie approximative.
  • Manipulez des dates et heures : calculez le nombre de jours entre deux dates données.

#Solutions (exemples)

#À retenir

Bonnes pratiques
  • Nommer les variables clairement (snake_case).
  • Préférer l'interpolation (f-strings) aux concaténations.
  • Connaître les types de base et conversions simples.
Erreurs fréquentes
  • Confondre '2' + 2 (erreur de type) avec 2 + 2.
  • Réutiliser un nom de fonction builtin (ex: list, str) comme variable.
  • Oublier que l'affectation crée/rebinde une référence (les listes sont mutables).
Alias involontaires

Copier une référence (ex: ys = xs) lie deux noms au même objet. Pour copier les données: xs.copy() (superficiel) ou copy.deepcopy si nécessaire.

#Quiz rapide

Quelle expression retourne True ?
Quelle expression retourne True ?
Quelle f-string est valide ?
Quelle f-string est valide ?

#Animation: portée et résolution des noms (LEGB)

Builtins: len seulement
Vitesse
Local✓ trouvé
"local"
Enclosing
(non défini)
Global
"global"
Builtins
(non défini)
Pseudo‑code (LEGB)
x = "global"  # Global
def outer():
    # (pas de x ici)
    def inner():
        x = "local"
        print(x)  # LEGB
    inner()
outer()
print(x) → "local" (dans Local)