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.
| Instruction | a | b | temp |
|---|---|---|---|
| Départ | 3 | 8 | |
| temp = a | 3 | 8 | 3 |
| a = b | 8 | 8 | 3 |
| b = temp | 8 | 3 | 3 |
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.
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.
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.
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.
É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.
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.
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.
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.
