Calculer et simuler avec Python et le tableur

Comment automatiser un calcul tout en gardant le contrôle de son sens ?

Environ 35 minutes

  • Décrire un calcul et suivre les variables
  • Répéter un calcul et organiser le tableur
  • Conserver des résultats et sélectionner des données
Sommaire
  1. Décrire un calcul et suivre les variables
  2. Répéter un calcul et organiser le tableur
  3. Conserver des résultats et sélectionner des données
  4. Simuler, tester et raisonner

Comment automatiser un calcul tout en gardant le contrôle de son sens ?

Une feuille de calcul et un programme appliquent des instructions précises. Tu vas suivre leurs valeurs, organiser des répétitions et tester les résultats. Les situations de gestion de cette leçon sont fictives. Ces outils se réutilisent toute l’année dans les fonctions, les suites et les probabilités.

Décrire un calcul et suivre les variables

Un algorithme décrit une succession d’instructions permettant de résoudre une famille de problèmes. Avant de programmer, précise les données de départ, les opérations et le résultat recherché. Dans une entreprise fictive, calculer le prix après remise demande un prix initial et un taux. Le résultat dépend de ces deux entrées. Le programme automatise la règle choisie ; il ne décide pas si cette règle représente correctement une pratique commerciale. Il faut donc séparer le modèle, sa traduction en instructions et la vérification du résultat.

Une variable associe un nom à une valeur qui peut être remplacée. En Python, prix = 80 affecte la valeur 80 au nom prix. L’instruction prix = prix + 5 lit d’abord l’ancienne valeur, calcule 85, puis remplace la valeur associée à prix. Ce n’est pas une égalité mathématique entre un nombre et lui-même augmenté de cinq. Le signe == teste une égalité ; le signe = réalise une affectation. Dans un algorithme rédigé en français, la flèche ← évite cette confusion.

Python distingue notamment les entiers, les nombres décimaux approchés, les textes et les booléens True ou False. Le séparateur décimal du code est le point : 0.04 représente quatre centièmes. Une chaîne entre guillemets, comme "80", est un texte, pas le nombre 80. Les parenthèses organisent les calculs. Le signe * multiplie et / divise. Pour obtenir le carré de x, on peut écrire x*x. Les noms de variables doivent rester explicites et une variable doit recevoir une valeur avant son premier usage.

Vocabulaire

Entrée :
Donnée reçue avant le traitement.
Sortie :
Résultat renvoyé ou affiché après le traitement.
Affectation :
Association ou remplacement d’une valeur par un nom.
Booléen :
Valeur logique True ou False.
Compteur :
Variable qui dénombre des événements.
Accumulateur :
Variable qui rassemble progressivement une somme ou un produit.

Exemple résolu

Un magasin fictif applique une remise de 15 % sur un prix de 80 €. Écrire une fonction qui renvoie le prix réduit et calculer son résultat.

  1. Étape 1 : Entrées : prix et taux sous forme décimale ; sortie : prix après remise en euros.
  2. Étape 2 : Code Python : def prix_reduit(prix, taux): return prix*(1-taux)
  3. Étape 3 : Appel : prix_reduit(80, 0.15). Le coefficient conservé est 0,85.
  4. Étape 4 : Calcul indépendant : 80 × 0,85 = 68.

Résultat : La fonction renvoie 68, soit un prix réduit de 68 €. Elle peut être réutilisée avec un autre prix et un autre taux.

Piège à éviter : Passer 15 à la place de 0.15 ferait soustraire quinze fois le prix ; le taux doit être exprimé en proportion.

À toi d'essayer

Après les instructions a = 12, b = a + 3 puis a = 2*b, quelles sont les valeurs finales de a et b ?

Voir la réponse

La deuxième instruction donne b = 15. La troisième donne a = 30. b reste égal à 15 : changer a ne recalcule pas automatiquement l’instruction précédente.

Une fonction définie avec def regroupe un calcul réutilisable. Ses paramètres sont les noms des entrées. return renvoie une valeur que le programme appelant peut réutiliser ; print affiche un résultat. Dans une fonction comportant plusieurs lignes, les instructions du corps sont indentées de la même manière, habituellement de quatre espaces. Le deux-points termine la ligne de définition. Une fonction peut appeler une autre fonction : cette décomposition permet de contrôler séparément les étapes d’un calcul complexe.

Répéter un calcul et organiser le tableur

Une boucle répète des instructions. Quand le nombre de répétitions est connu, for convient. range(5) fournit les cinq entiers 0, 1, 2, 3 et 4 : la borne finale est exclue. Quand on cherche le premier dépassement d’un seuil, while teste une condition avant chaque répétition. La boucle peut donc ne jamais commencer si la condition est déjà fausse. Pour éviter une répétition infinie, il faut expliquer pourquoi les valeurs mises à jour feront finalement échouer le test.

Pour additionner des valeurs, initialise un accumulateur à zéro. Pour multiplier des valeurs, initialise-le à un. Un compteur commence souvent à zéro et augmente de un lorsqu’un événement se produit. L’initialisation se place avant la boucle ; la répéter à l’intérieur effacerait le travail précédent. Dans le suivi d’un montant, distingue le nombre de passages et le nombre d’états : un état initial suivi de cinq mises à jour donne six valeurs observées.

Le montant initial est 100 € ; chaque passage ajoute 20 €. Le rang compte les mises à jour déjà effectuées.

Exemple résolu

Un fonds fictif contient 100 €. On ajoute 20 € à chaque étape. Calculer son montant après cinq ajouts et retrouver le résultat dans un tableur.

  1. Étape 1 : Initialiser avec montant = 100.
  2. Étape 2 : Répéter avec for n in range(5): montant = montant + 20
  3. Étape 3 : Les montants successifs sont 120, 140, 160, 180 puis 200.
  4. Étape 4 : Dans le tableur : A2 contient 0 et B2 contient 100. A3 contient =A2+1 et B3 contient =B2+20. Recopier A3:B3 jusqu’à la ligne 7.

Résultat : Le montant final est 200 €. La cellule B7 correspond au rang 5, car la ligne 2 contient le rang 0.

Piège à éviter : Confondre le numéro de ligne et le rang ferait compter un ajout de trop ou de moins.

Une formule de tableur commence par =. Lorsqu’on recopie =B2+20 de B3 vers B4, la référence relative B2 devient B3. Si le supplément est placé en E1, écris =B2+$E$1 : les deux signes $ fixent la colonne et la ligne de ce paramètre. Tu peux alors modifier E1 pour comparer des scénarios. Les intitulés de colonnes et les unités permettent à une autre personne de comprendre la feuille. Afficher deux décimales ne modifie pas forcément la valeur conservée pour les calculs suivants.

Une condition permet de choisir un traitement. En Python, if montant > 150 teste un dépassement strict. L’égalité à 150 donne False. Pour accepter cette égalité, il faut >=. Le connecteur and exige que les deux conditions soient vraies ; or accepte au moins une condition vraie, y compris les deux. not inverse la valeur logique. Par exemple, 0 <= taux and taux <= 1 vérifie que le taux appartient à l’intervalle fermé de zéro à un.

À toi d'essayer

Un programme cherche le premier rang où un montant initial de 100 €, augmenté de 20 € par étape, dépasse strictement 200 €. Faut-il poursuivre tant que montant < 200 ou tant que montant <= 200 ? Justifie et donne le rang final.

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

Conserver des résultats et sélectionner des données

Une liste regroupe plusieurs valeurs ordonnées. ventes = [12, 8, 15] crée une liste par extension, c’est-à-dire en écrivant ses éléments. Le premier indice est zéro : ventes[0] vaut 12, ventes[2] vaut 15. len(ventes) donne le nombre d’éléments, ici trois ; l’indice 3 serait donc hors de la liste. ventes.append(10) ajoute 10 à la fin. ventes.pop() retire et renvoie le dernier élément. Ces opérations changent la liste.

Une liste peut aussi être construite par ajouts successifs : initialise valeurs = [] puis utilise une boucle qui ajoute chaque résultat avec append. L’écriture carres = [n*n for n in range(6)] est une construction en compréhension. Elle produit [0, 1, 4, 9, 16, 25]. La variable n prend successivement chaque valeur proposée par range(6). On peut parcourir directement les valeurs avec for v in ventes, sans avoir besoin de connaître leur indice.

La liste des carrés conserve les valeurs calculées. Chaque point associe un indice à l’élément correspondant.

Sélectionner des données consiste à garder les éléments qui satisfont une condition. Par exemple, [v for v in ventes if v >= 10] conserve les ventes au moins égales à dix. Sur un fichier de données, commence par repérer les noms des colonnes, les unités et les éventuelles cellules vides ; ne transforme pas une absence de donnée en zéro sans justification. Un tableau croisé répartit ensuite les observations selon deux critères. Chaque observation doit être comptée une fois dans la case correspondant à ses deux catégories.

Dans un fichier fictif de quatre commandes, les lignes portent les couples de catégories suivants : retrait et payé ; livraison et payé ; livraison et impayé ; retrait et payé. Le tableau croisé contient deux commandes retrait/payé, zéro retrait/impayé, une livraison/payé et une livraison/impayé. Le total des quatre cases vaut quatre. Dans un tableur, filtre les colonnes ou utilise un tableau croisé pour retrouver ce classement ; contrôle ensuite les totaux de lignes et de colonnes avant d’interpréter les proportions.

Simuler, tester et raisonner

Une simulation reproduit les règles d’un modèle, pas une certitude sur l’avenir. Pour simuler un succès de probabilité 0,3, on peut tirer un nombre avec random(), fourni par from random import random, puis tester random() < 0.3. Cette fonction fournit un nombre pseudo-aléatoire dans l’intervalle de zéro inclus à un exclu. Un compteur dénombre les succès. Sur N répétitions, la fréquence obtenue vaut compteur/N. Elle varie d’une simulation à l’autre et n’est pas nécessairement égale à 0,3.

Exemple résolu

Pour vérifier le principe d’une simulation de succès de probabilité 0,3, on dispose des six valeurs de test [0.12, 0.81, 0.29, 0.30, 0.04, 0.77]. Compter les succès définis par une valeur strictement inférieure à 0,3.

  1. Étape 1 : Initialiser succes = 0 puis parcourir les valeurs de la liste.
  2. Étape 2 : Les valeurs 0,12 ; 0,29 ; 0,04 satisfont le test. La valeur 0,30 ne le satisfait pas.
  3. Étape 3 : Le compteur augmente trois fois : succes vaut 3.
  4. Étape 4 : La fréquence de succès sur cette liste de test vaut 3/6 = 0,5.

Résultat : La fréquence est 0,5 sur ces six valeurs de test. Cette liste sert à vérifier le comptage ; elle ne démontre pas une probabilité de 0,5 pour le modèle.

Piège à éviter : Remplacer une probabilité théorique par la fréquence d’une petite simulation confond modèle et observation.

Tester plusieurs entrées ne prouve pas qu’un programme fonctionne pour toutes les entrées possibles. Un contre-exemple suffit cependant à réfuter une affirmation universelle. Si quelqu’un affirme que x*x est toujours supérieur ou égal à x, le nombre 0,5 donne 0,25, inférieur à 0,5 : l’affirmation est fausse sur les réels. En revanche, réussir cent essais ne suffit pas à établir une propriété sur une infinité de nombres. Il faut distinguer observation, conjecture et démonstration.

À toi d'essayer

Un tarif fictif accorde une remise aux clients majeurs ou aux membres d’une association. Un programme utilise age >= 18 and membre. Propose un contre-exemple qui révèle l’erreur et corrige le connecteur.

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

Au bac : lire et vérifier un programme

  1. Nommer les entrées, leurs unités et le résultat demandé.
  2. Suivre les variables dans un petit tableau après chaque instruction.
  3. Vérifier les bornes de range, le caractère strict du test et l’initialisation.
  4. Tester un cas ordinaire et un cas limite, puis justifier la réponse dans le contexte.
Attention :

Erreurs fréquentes : oublier l’indentation, confondre affectation et comparaison, compter un état initial comme une répétition, ou interpréter une simulation comme une prévision certaine. Vérifie aussi qu’une formule recopiée garde ses paramètres fixes.

Bilan des raisonnements

SituationOutil et précaution
Calcul répétéBoucle, initialisation et nombre de passages.
Collection de résultatsListe, indices commençant à zéro.
Choix entre deux casCondition logique et test des frontières.
Expérience aléatoireModèle explicite, fréquence observée et fluctuations.

Pour poursuivre, ouvre S’entraîner à l’adresse /exercices.

À retenir

  • Une affectation remplace une valeur ; une comparaison produit un booléen.
  • range(n) contient n entiers de zéro à n − 1 pour un entier n positif.
  • Une liste est ordonnée et son premier indice vaut zéro.
  • Une fréquence simulée fluctue ; un contre-exemple réfute une affirmation universelle.

Fiche de révision

Trace les valeurs dans l’ordre des instructions : a = a + 1 utilise l’ancien a avant de le remplacer.

Prévois zéro pour une somme, un pour un produit, puis conserve l’accumulateur entre les passages.

Dans le tableur, la référence B2 se déplace ; $E$1 reste fixe lors de la recopie.

Teste un seuil à l’égalité

dépasser strictement exige de continuer tant que le montant est inférieur ou égal au seuil.

Sur des données aléatoires, donne l’effectif de simulation et distingue fréquence obtenue et probabilité du modèle.

Questions fréquentes

Une fonction doit-elle toujours afficher quelque chose ?

Non. return renvoie une valeur utilisable ailleurs ; print sert seulement à afficher. Une fonction de calcul est souvent plus facile à réutiliser si elle renvoie son résultat.

Pourquoi tester une valeur frontière ?

Une erreur entre > et >= peut rester invisible avec des valeurs éloignées du seuil. Tester exactement le seuil distingue les deux règles.

Et maintenant ?

Tu as lu le cours. L’étape suivante tient en une action.

Relis le coursLes exercices de ce chapitre arrivent bientôt.

Prolonge l’expérience !

Continue à explorer ce chapitre à travers de nouvelles activités, des défis et des expériences interactives. Avec Premium, l’apprentissage continue !

Ici, tu débloques aussi 2 corrections détaillées.

Parent ? Suivez les progrès de votre enfant.

Tous les cours de Mathématiques — Première STMG