Première · Langages et programmation

Variables, types et affectations en Python

Un score augmente, un compteur repart à zéro, une valeur semble disparaître : toutes ces situations reposent sur l’affectation. Apprendre à suivre précisément les valeurs transforme un programme mystérieux en une suite de décisions que vous pouvez expliquer.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Suivre les valeurs des variables instruction par instruction
  • Distinguer les types usuels et choisir une conversion
  • Expliquer la différence entre affectation et égalité

Les notions nécessaires sont introduites dans cette ressource.

Un nom pour retrouver une valeur

Une variable permet de désigner une valeur à l’aide d’un nom. Dans score = 12, Python commence par évaluer la partie droite, puis associe le nom score au résultat. Le signe = donne donc une instruction ; il ne demande pas si deux expressions sont égales. Cette distinction explique pourquoi score = score + 3 est parfaitement cohérent : on lit l’ancienne valeur, on ajoute trois, puis on remplace l’association. Un nom descriptif comme nombre_essais rend le programme plus facile à vérifier qu’une succession de lettres sans explication.

Une affectation se lit dans un ordre précis : chercher les valeurs déjà disponibles, calculer le résultat, puis mettre à jour le nom de gauche. Si le nom lu à droite n’existe pas encore, le calcul échoue. Ainsi compteur = compteur + 1 exige une initialisation préalable ; écrire cette ligne ne crée pas magiquement la valeur de départ.

Le type détermine les opérations possibles

Les entiers appartiennent au type int, les nombres approchés au type float, les textes au type str et les valeurs de vérité au type bool. Le même symbole peut avoir des sens différents : 4 + 2 calcule un entier, alors que "4" + "2" construit le texte "42". Python ne convertit pas automatiquement tout ce qui ressemble à un nombre. Une saisie avec input fournit du texte ; int peut la convertir si son contenu représente un entier valide. Il faut choisir le type selon le sens des données, pas seulement leur apparence.

Le type appartient à la valeur désignée : un même nom peut recevoir successivement un entier puis un texte. Cette liberté demande de la rigueur. Un numéro de téléphone reste généralement un texte : additionner deux numéros ne sert à rien et une conversion en entier ferait perdre un zéro initial. À l’inverse, un nombre de places doit permettre un calcul.

Lire une expression avant de modifier la mémoire

Les multiplications précèdent les additions, et les parenthèses rendent le regroupement explicite. Dans total = 2 + 3 * 4, la valeur obtenue est 14. La division / produit un flottant ; // fournit le quotient entier avec arrondi vers le bas, et % donne le reste associé. Pour des quantités positives, 17 // 5 vaut 3 et 17 % 5 vaut 2. Avant chaque affectation, calculez entièrement l’expression de droite avec les valeurs disponibles à cet instant : les instructions suivantes n’ont encore aucun effet.

jetons = 17
boites = jetons // 5
reste = jetons % 5
print(boites, reste)

La relation a = b * (a // b) + a % b décrit quotient et reste pour un diviseur non nul. Avec des entiers négatifs, l’arrondi vers le bas compte : -7 // 3 vaut -3 et -7 % 3 vaut 2. Il ne faut donc pas confondre division entière et simple suppression des chiffres après la virgule.

Une copie de valeur n’est pas une formule vivante

Après a = 7 puis b = a, les deux noms désignent l’entier 7. Si l’on exécute ensuite a = 10, b conserve 7 : Python n’a pas mémorisé une règle disant que b doit suivre a. Cette observation suffit à comprendre beaucoup d’erreurs de début de Première. Pour échanger deux valeurs avec des affectations simples, une variable temporaire préserve la première avant son remplacement. Les objets modifiables introduiront d’autres subtilités plus tard ; ici, nous travaillons avec des nombres et des textes pour isoler le mécanisme de base.

Lorsque deux valeurs initiales sont égales, le mauvais échange semble fonctionner. Ce cas ne permet pas de départager les programmes. Choisir deux valeurs distinctes, puis inclure zéro et une valeur négative, rend les tests plus révélateurs. Une trace explique alors pourquoi le programme marche, au lieu de constater seulement une sortie plausible.

Suivre un budget sans mélanger les instants

Un carnet contient budget = 30, puis avant = budget, budget = budget - 7 et budget = budget + 2. Après la copie, les deux noms désignent trente ; après l’achat, seul le budget courant vaut vingt-trois ; après le remboursement, il vaut vingt-cinq. Le nom avant conserve trente. Pour connaître la dépense nette, on calcule maintenant avant - budget, soit cinq. Si on avait calculé cette différence immédiatement après la copie, elle aurait valu zéro et serait restée zéro sans nouvelle affectation.

Une trace peut donc avoir trois colonnes : instruction, budget courant, budget sauvegardé. Écrivez aussi « non défini » avant la première affectation d’un nom. Ce n’est pas la même chose que zéro : utiliser un nom non défini provoque une erreur, tandis que zéro constitue une valeur calculable.

Construire une expression et contrôler son sens

Pour transporter vingt-neuf personnes dans des véhicules de quatre places, le quotient donne sept véhicules pleins et le reste une personne. Il faut pourtant huit véhicules au total. On peut calculer (29 + 4 - 1) // 4. Ajouter trois avant la division entière produit l’arrondi supérieur pour un nombre de personnes entier positif ou nul. Pour vingt-huit personnes, cette expression donne bien sept ; pour zéro, elle donne zéro.

Avant de programmer une formule, nommez les unités : personnes, places par véhicule, véhicules. Vérifiez ensuite un cas exact, un cas avec reste et zéro. Une formule peut être syntaxiquement valide mais répondre à une autre question. La division ordinaire convient à une moyenne ; la division entière convient à un nombre de groupes complets.

À vous de faire varier les choses

Échange, copie ou écrasement ?

Choisissez les valeurs initiales et une méthode. Prédisez les valeurs finales, puis observez chaque affectation.

Lire le résultat de l’expérience initiale

a = 8 ; b = 3

La variable temporaire préserve la valeur avant son remplacement.

Instructionabtemp
Départ38
temp = a383
a = b883
b = temp833

Une affectation change une association à un instant précis ; la mémoire ne devine jamais l’intention du programme.

De la compréhension à l’autonomie

À vous de résoudre

Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.

Exercice 1 · S’entraîner#

Le score conservé

On exécute a = 7, b = a, a = a + 5, puis b = b * 2. Quelles sont les valeurs finales ? Expliquez pourquoi b ne devient pas 24.

Indice 1

Écrivez une ligne de tableau après chaque instruction.

Indice 2

Au moment de b = a, la valeur lue est 7.

Comprendre la correction

Après les deux premières lignes, a et b valent 7. La troisième remplace a par 12, sans modifier b. La dernière multiplie donc 7 par 2 : b vaut 14. La valeur 24 supposerait à tort que b suit automatiquement les changements de a.

Exercice 2 · S’entraîner#

Des équipes complètes

Un club accueille 29 élèves et forme des équipes de 4. Écrivez les deux expressions donnant le nombre d’équipes complètes et le nombre d’élèves restants.

Indice 1

Il faut distinguer quotient et reste.

Indice 2

Vérifiez l’identité 29 = 4 × quotient + reste.

Comprendre la correction

29 // 4 donne 7 équipes complètes et 29 % 4 donne 1 élève restant. La vérification 29 = 4 × 7 + 1 confirme les résultats. Employer / donnerait 7.25, qui ne représente pas un nombre d’équipes complètes et ne répond donc pas à la question.

Exercice 3 · S’entraîner#

Un texte qui ressemble à un entier

La variable saisie vaut "18". Pourquoi saisie + 2 échoue-t-il, et comment obtenir d’une part 20, d’autre part "182" ?

Indice 1

Les deux opérandes doivent permettre l’opération choisie.

Indice 2

Convertissez la saisie pour calculer ; convertissez 2 pour concaténer.

Comprendre la correction

int(saisie) + 2 produit l’entier 20. saisie + str(2) produit le texte "182". L’expression initiale mélange directement un texte et un entier, ce qui lève une erreur de type. Les deux corrections sont valides mais répondent à des intentions différentes : calculer ou construire un texte.

Exercice 4 · S’entraîner#

Échanger sans perdre

Avec x = 3 et y = 8, un élève écrit x = y puis y = x. Corrigez avec une variable temporaire et justifiez chaque étape.

Indice 1

Après la première ligne proposée, où se trouve encore la valeur 3 ?

Indice 2

Conservez x avant de le remplacer.

Comprendre la correction

On écrit temporaire = x, puis x = y, puis y = temporaire. temporaire conserve 3 ; x reçoit ensuite 8 ; y reçoit enfin 3. Dans la version incorrecte, la première ligne remplace x par 8, et la seconde relit ce 8 : les deux variables finissent donc à 8.

Exercice 5 · Approfondir et relier#

Le stock et sa photographie

Un stock vaut 24. On mémorise cette valeur dans initial, on retire 5 articles puis on reçoit 9 articles. Écrivez les affectations, calculez le stock final et la variation nette. Expliquez ce que deviendrait la variation si elle était calculée avant les deux mouvements.

Indice 1

Une copie garde la valeur disponible lors de sa création.

Indice 2

La variation nette est la valeur finale moins la valeur initiale.

Comprendre la correction

On écrit stock = 24, initial = stock, stock = stock - 5, puis stock = stock + 9. Le stock passe par 24, 19 et 28 ; initial reste 24. La variation finale est donc 28 - 24 = 4. Calculée juste après la copie, stock - initial aurait donné zéro. Elle ne serait pas recalculée automatiquement après les mouvements.

Exercice 6 · Approfondir et relier#

Des photographies en paquets

On doit envoyer 53 photographies par paquets de 8 au maximum. Calculez les paquets complets, le reste et le nombre total de paquets. Proposez une expression valable aussi pour 56 photographies et pour aucune photographie.

Indice 1

Le nombre total de paquets diffère du quotient si le reste est non nul.

Indice 2

Pour une capacité positive de huit, essayez (nombre + 7) // 8.

Comprendre la correction

Les opérations 53 // 8 et 53 % 8 donnent six paquets complets et cinq photographies restantes. Il faut sept paquets. L’expression (nombre + 7) // 8 donne sept pour 53 et 56, puis zéro pour zéro. La formule nombre // 8 + 1 serait incorrecte pour 56 : elle compterait un paquet vide supplémentaire.

Exercice 7 · Approfondir et relier#

Calculer une durée à partir d’une saisie

La saisie textuelle est "3671" et représente des secondes. Donnez la conversion nécessaire, puis les heures, minutes restantes et secondes restantes. Vérifiez en reconstruisant la durée. Indiquez pourquoi la même conversion échouerait avec "une heure".

Indice 1

Retirez les heures complètes avant de chercher les minutes.

Indice 2

Une heure vaut 3600 secondes ; une minute vaut 60 secondes.

Comprendre la correction

On calcule duree = int(saisie), puis heures = duree // 3600, reste = duree % 3600, minutes = reste // 60 et secondes = reste % 60. On obtient une heure, une minute et onze secondes. La reconstruction 1 * 3600 + 1 * 60 + 11 redonne 3671. Le texte "une heure" ne représente pas un entier accepté par int.

Les erreurs qui méritent un détour

Confondre = et ==
Le premier associe une valeur à un nom ; le second compare deux valeurs et produit un booléen.
Croire que changer a recalcule b
Une affectation évalue son expression immédiatement. Pour recalculer b, il faut exécuter une nouvelle instruction.

La fiche à garder

L’essentiel à retenir

  • Évaluer la droite, puis affecter à gauche.
  • Le type guide les opérations et les conversions.
  • Un tableau de valeurs permet de justifier une exécution.

Le prochain pas

Retrouver le catalogue de Première

Ce chapitre s’appuie sur le programme officiel de Première (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.