Cours Python · Module 1: Bases de Python

Les variables - les sentiers de la jungle

9 min de lecture
Dans cette leçon11

Bon retour ! Darwin à l'appareil. Le carnet de terrain se remplit : direction de marche, coordonnées du camp, nombre d'espèces. Le texte de print() disparaît dès qu'il est affiché, alors qu'un programme doit ranger ses données et y revenir. C'est le rôle des variables.

Que sont les variables ?

Imagine que pendant une expédition tu trouves différents objets :

  • Une boussole qui indique la direction
  • Une carte avec un lieu marqué
  • Un carnet avec le nombre d'espèces découvertes

Chacun de ces objets a un nom et stocke une valeur. En Python, ce sont des variables - comme des bocaux étiquetés dans la tente des spécimens. Voici une entrée du carnet écrite en code :

1# La boussole pointe vers le nord
2direction = "Nord"
3
4# La carte montre des coordonnées
5latitude = -3.4653
6longitude = 29.3608
7
8# Compter les espèces découvertes
9species_count = 47
10
11# A-t-on trouvé une espèce rare ?
12rare_species_found = True

Le signe = n'est pas une égalité mais une affectation : le nom à gauche est accroché à la valeur à droite. Rien ne s'est affiché - les variables attendent en mémoire.

Créer des variables

La syntaxe est toujours la même : un nom, un signe égal, une valeur. Seul le type de valeur change :

1# Syntaxe : nom_de_variable = valeur
2
3# Texte (chaînes de caractères)
4explorer_name = "Darwin"
5jungle_type = "tropicale"
6
7# Nombres entiers (integers)
8team_size = 5
9days_in_jungle = 14
10
11# Nombres décimaux (floats)
12temperature = 32.5
13humidity = 78.3
14
15# Valeurs logiques (booléens)
16is_safe = True
17found_water = False

Important : Python reconnaît automatiquement le type de la variable ! Tu n'as pas besoin de le déclarer. Les décimales s'écrivent avec un point : 32,5 ne provoque pas d'erreur, il crée une paire de nombres, 32 et 5.

Nommage des variables - les règles de la jungle

Un nom est un panneau sur le sentier : lisible pour toi et valide pour Python.

Autorisé :

Un nom peut contenir des lettres, des chiffres et des underscores, et on relie les mots par un underscore - c'est le style snake_case. Les crochets créent une liste, que tu verras plus tard :

1# Snake case (recommandé en Python)
2jungle_temperature = 30
3discovered_species = ["Python", "Perroquet", "Lion"]
4
5# Peut contenir des lettres, des chiffres, des underscores
6species_1 = "Python regius"
7species_2 = "Panthera leo"
8rare_species_2024 = "Nouvelle espèce"
9
10# Peut commencer par un underscore
11_private_notes = "Information secrète"
12__hidden_treasure = "Trésor"

Par convention, un underscore au début signifie « à usage interne ».

Interdit :

Ces lignes provoquent une SyntaxError, donc Python refuserait de lancer le programme - d'où les commentaires. La dernière ligne montre la bonne version :

1# Ne peut pas commencer par un chiffre
2# 1st_species = "Erreur !"  # SyntaxError
3
4# Ne peut pas contenir d'espaces ni de tirets
5# jungle temperature = 30  # SyntaxError
6# jungle-temperature = 30  # SyntaxError
7
8# Ne peut pas utiliser de caractères spéciaux
9# species! = "Erreur"  # SyntaxError
10# species@ = "Erreur"  # SyntaxError
11
12# Ne peut pas être un mot-clé Python
13# if = 5  # SyntaxError
14# for = 10  # SyntaxError
15# def = "texte"  # SyntaxError
16
17jungle_temperature = 30  # correct : un underscore au lieu d'un espace

Le tiret est exclu, car Python le lit comme un moins : jungle-temperature est une soustraction, et on ne peut rien affecter à un calcul.

Les mots-clés Python (réservés) :

Les mots-clés ont un sens fixe dans le langage, ils ne peuvent donc pas servir de noms de variables :

1# Tu NE PEUX PAS utiliser ces noms comme variables :
2# False      await      else       import     pass
3# None       break      except     in         raise
4# True       class      finally    is         return
5# and        continue   for        lambda     try
6# as         def        from       nonlocal   while
7# assert     del        global     not        with
8# async      elif       if         or         yield
9
10import keyword
11print(len(keyword.kwlist))  # 35

Tu peux toujours vérifier la liste dans keyword.kwlist. async et await y sont entrés avec Python 3.7, donc les vieux tableaux ne les ont pas.

Bonnes pratiques de nommage

Python acceptera le nom t, mais dans une semaine tu ne te souviendras plus de ce qu'il voulait dire. Compare les noms :

1# Noms descriptifs - tu sais immédiatement ce qu'ils stockent
2daily_temperature = 32
3discovered_species_count = 15
4expedition_start_date = "2024-11-24"
5
6# Mauvais noms - flous, courts
7t = 32  # C'est quoi t ?
8x = 15  # Que signifie x ?
9d = "2024-11-24"  # Date de quoi ?
10
11# Snake case (style Python)
12jungle_humidity_level = 80
13
14# camelCase (courant en JavaScript et en Java) - pas pour les variables Python !
15jungleHumidityLevel = 80
16
17# Les noms longs sont OK s'ils sont descriptifs
18number_of_rare_species_discovered_in_2024 = 3  # Clair !

Les deux styles fonctionnent, car Python ne vérifie pas le style. C'est une convention du guide PEP 8 : les variables en snake_case, le PascalCase (par ex. JungleExpedition) pour les classes. Adopte le snake_case dès le premier jour.

Afficher des variables

print() accepte une variable comme du texte, et une f-string, une chaîne précédée de la lettre f, insère les valeurs directement dans une phrase :

1explorer_name = "Darwin"
2expedition_day = 5
3
4# Affichage simple
5print(explorer_name)  # Darwin
6print(expedition_day)  # 5
7
8# Affichage avec du texte
9print("Explorateur :", explorer_name)  # Explorateur : Darwin
10
11# F-string (la meilleure méthode !) - Python 3.6+
12print(f"Salut, {explorer_name} !")
13# Salut, Darwin !
14
15print(f"Jour d'expédition : {expedition_day}")
16# Jour d'expédition : 5
17
18# F-strings complexes
19species_found = 12
20days = 3
21print(f"Nous avons découvert {species_found} espèces en {days} jours !")
22# Nous avons découvert 12 espèces en 3 jours !
23
24print(f"Température : {30}°C")  # Température : 30°C

Python évalue tout ce qui se trouve entre les accolades {} : une variable, un calcul, même un simple nombre, comme à la dernière ligne. Sans le f, les accolades seraient affichées telles quelles. La virgule dans print() marche aussi, mais je te conseille les f-strings : elles se lisent mieux.

Changer la valeur des variables

Les variables peuvent changer de valeur (c'est pour ça qu'on les appelle « variables » !). Chaque jour apporte des découvertes, et on met à jour la même entrée :

1# Jour 1 de l'expédition
2species_count = 5
3print(f"Jour 1 : {species_count} espèces")  # Jour 1 : 5 espèces
4
5# Jour 2 - on en a trouvé plus
6species_count = 12
7print(f"Jour 2 : {species_count} espèces")  # Jour 2 : 12 espèces
8
9# Jour 3 - on ajoute de nouvelles découvertes
10species_count = species_count + 7  # 12 + 7 = 19
11print(f"Jour 3 : {species_count} espèces")  # Jour 3 : 19 espèces

Chaque affectation efface l'ancienne valeur. À la dernière étape, Python calcule d'abord la partie droite (12 + 7), puis accroche le résultat au nom. Un simple species_count + 7 sans = ne changerait rien.

Plusieurs variables à la fois

Python permet des affectations astucieuses : plusieurs variables sur une ligne, une valeur de départ commune et l'échange de places :

1# Affecter plusieurs variables sur une ligne
2x, y, z = 10, 20, 30
3print(f"x={x}, y={y}, z={z}")  # x=10, y=20, z=30
4
5# Même valeur pour plusieurs variables
6a = b = c = 0
7print(f"a={a}, b={b}, c={c}")  # a=0, b=0, c=0
8
9# Échanger des valeurs
10first = "A"
11second = "B"
12print(f"Avant : first={first}, second={second}")  # Avant : first=A, second=B
13
14first, second = second, first  # Échange magique !
15print(f"Après : first={first}, second={second}")  # Après : first=B, second=A

Pendant l'échange, Python lit d'abord les deux valeurs, puis les affecte en croix, donc aucune variable auxiliaire n'est nécessaire. Le nombre de noms doit correspondre au nombre de valeurs : x, y = 1, 2, 3 donne une ValueError.

Input - collecter des données de l'utilisateur

Les données de l'utilisateur arrivent par input() : la fonction affiche une question, attend une réponse au clavier et la transmet au programme :

1# Question simple
2name = input("Comment t'appelles-tu ? ")
3print(f"Salut, {name} !")
4
5# input() renvoie TOUJOURS une chaîne (du texte) !
6age_text = input("Quel âge as-tu ? ")
7print(type(age_text))  # <class 'str'>
8
9# Conversion en nombre
10age = int(age_text)  # Change string → int
11print(f"L'année prochaine tu auras {age + 1} ans")

IMPORTANT : input() renvoie toujours une chaîne ! Un 25 tapé au clavier est le texte "25", et "25" + 1 provoque une TypeError. Seule une conversion donne un nombre : int() ou float().

Exemple pratique - Journal d'expédition

Réunissons tout dans un programme pour l'entrée du soir dans le journal : il demande les données, convertit les nombres et affiche un rapport :

1# Programme : Journal de l'explorateur
2print("=== Journal d'expédition ===")
3
4# Collecte des données
5explorer_name = input("Nom de l'explorateur : ")
6location = input("Lieu : ")
7species_found = int(input("Combien d'espèces as-tu découvertes aujourd'hui ? "))
8temperature = float(input("Température (°C) : "))
9notes = input("Notes du jour : ")
10
11# Affichage du rapport
12print("\n--- RAPPORT QUOTIDIEN ---")
13print(f"Explorateur : {explorer_name}")
14print(f"Lieu : {location}")
15print(f"Espèces découvertes : {species_found}")
16print(f"Température : {temperature}°C")
17print(f"Notes : {notes}")
18print("--- FIN DU RAPPORT ---")

Dans int(input(...)), la réponse passe directement par la conversion, donc species_found est un nombre. Le champ location reste une chaîne, car on ne fait pas de calculs avec.

Exercice pratique

Essaie de créer par toi-même un programme qui :

  1. Demande ton nom
  2. Demande ton animal préféré
  3. Demande ton nombre préféré
  4. Affiche : « Salut {name} ! Ton animal préféré est {animal} et ton nombre préféré est {number} ! »
Code de cette leçon : main.py
1# Tâche : Crée un programme qui collecte les données de l'utilisateur
2
3# TODO : Demande le nom
4name = input("Comment t'appelles-tu ? ")
5
6# TODO : Demande l'animal préféré
7animal = input("Animal préféré : ")
8
9# TODO : Demande le nombre préféré
10number = input("Nombre préféré : ")
11
12# TODO : Affiche un message à l'aide d'une f-string
13print(f"Salut {name} ! Ton animal préféré est {animal} et ton nombre préféré est {number} !")

Résumé

Avant de continuer, assure-toi que :

  • Tu sais créer une variable et changer sa valeur
  • Tu comprends les règles de nommage
  • Tu affiches des variables avec print() et les f-strings
  • Tu connais la différence entre input() (string) et int(), float()

Dans la prochaine leçon, Darwin te montrera les types de données - comment classer les découvertes dans la jungle !

Retiens : une variable est un bocal étiqueté dans la tente du camp - le nom sur l'étiquette, la valeur dedans, et le contenu se change à tout moment.

Tu as repéré une erreur dans cette leçon ?

Teste tes connaissances

Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.

  1. 1. Quel nom de variable est VALIDE en Python ?

  2. 2. Quel style de nommage est recommandé pour les variables en Python ?

  3. 3. La fonction input() renvoie les données sous forme de :

  4. 4. Qu'est-ce qui sera affiché : print(f'Température : {30}°C') ?

Tâches pratiques dans le jeu

  • Éditeur de code

    Crée une variable explorer_name avec la valeur "Darwin" :

  • Éditeur de code

    Crée 4 variables de types différents : un texte (str), un nombre entier (int), un nombre décimal (float) et un booléen (bool) :

  • Éditeur de code

    Enregistre un prénom dans la variable name et affiche une salutation avec ce prénom en utilisant une f-string :

  • Clique dans l'ordre

    Construis un appel à print() qui affiche le texte Hello :

  • Tri vertical

    Ordonne les étapes du programme dans l'ordre :

Articles utiles