À mobiliser toute l’année
Les pratiques algorithmiques et le tableur font partie du programme. Ce repère est à utiliser au fil des chapitres, pas comme une option du programme ni comme une longue séquence préalable.
Les programmes Python 3 ci-dessous sont à copier dans un environnement Python ; le site ne les exécute pas. Le simulateur de fréquences, lui, fonctionne directement dans le navigateur. Les bases de syntaxe restent disponibles dans la ressource de Première.
Besoin d’un coup de pouce ? La méthode en 3 étapes
- Identifie les données d’entrée, le résultat attendu et les unités.
- Fais un tableau des variables sur un petit exemple.
- Teste ensuite les cas limites et compare à un calcul indépendant.
1. Compter et accumuler
Un compteur augmente pour dénombrer des éléments. Un accumulateur mémorise une somme ou un produit. Une somme commence généralement à 0 ; un produit commence à 1.
def somme_carres(n):
if not isinstance(n, int) or n < 0:
raise ValueError("n doit etre un entier positif ou nul")
total = 0
for k in range(1, n + 1):
total = total + k * k
return total
print(somme_carres(4)) # 1 + 4 + 9 + 16 = 30
La borne de fin de range est exclue : range(1,n+1) fournit les entiers de 1 à n. Pour n=0, la boucle ne fait aucun passage et la somme vide vaut 0. Remplacer k*k par k**3 permet d’explorer une somme de cubes ; par 1/k, une somme d’inverses pour k≥1.
2. Respecter l’ordre des instructions
Pour additionner les N premiers termes d’une suite géométrique de premier terme u0, on ajoute d’abord le terme courant, puis on calcule le suivant.
def somme_geometrique(u0, q, N):
if not isinstance(N, int) or N < 0:
raise ValueError("N doit etre un entier positif ou nul")
u = u0
total = 0
for _ in range(N):
total = total + u
u = q * u
return total
print(somme_geometrique(100, 0.5, 4)) # 187.5
Après la dernière itération, u contient déjà le terme suivant, qui n’a pas été ajouté. Avec des versements de fin de période, on peut au contraire mettre à jour directement le capital par capital=q*capital+versement.
Pause mémoire · Suivre l’ordre
u=3 et s=0. Deux fois, on fait s=s+u puis u=2*u. Que vaut s à la fin ?
Voir le raisonnement et la réponse
Après un passage, s=3 et u=6. Après deux passages, s=9 et u=12.
3. Construire une ligne du triangle de Pascal
Pour construire la ligne suivante, on conserve des 1 aux extrémités et on additionne les voisins de la ligne précédente. Une nouvelle liste évite d’écraser des valeurs encore utiles.
def pascal(n):
if not isinstance(n, int) or n < 0:
raise ValueError("n doit etre un entier positif ou nul")
ligne = [1]
for _ in range(n):
milieu = [ligne[k] + ligne[k + 1]
for k in range(len(ligne) - 1)]
ligne = [1] + milieu + [1]
return ligne
print(pascal(4)) # [1, 4, 6, 4, 1]
La ligne n possède n+1 éléments et sa somme vaut 2**n. Ces deux propriétés fournissent des tests simples. Le coefficient en position k compte les chemins avec k succès.
4. Simuler une loi binomiale
Un tirage pseudo-aléatoire U uniforme entre 0 et 1 est codé comme un succès lorsque U<p. On compte les succès dans n essais, puis on répète N fois ce groupe d’essais.
from random import random
def distribution_binomiale(n, p, N):
if not isinstance(n, int) or n < 1:
raise ValueError("n doit etre un entier strictement positif")
if not isinstance(N, int) or N < 1 or not 0 <= p <= 1:
raise ValueError("Verifier N et p")
effectifs = [0] * (n + 1)
for _ in range(N):
succes = 0
for _ in range(n):
if random() < p:
succes = succes + 1
effectifs[succes] = effectifs[succes] + 1
return effectifs
print(distribution_binomiale(3, 0.5, 80))
Les sorties changent à chaque exécution. La somme des effectifs doit toujours valoir N. Pour p=0, tous les succès comptés valent 0 ; pour p=1, ils valent n. On peut diviser chaque effectif par N et comparer les fréquences aux probabilités binomiales, puis représenter deux diagrammes en bâtons dans un tableur.
5. Filtrer une liste avec deux conditions
Les listes permettent de travailler sur des données réelles ou fictives. Le mot and exige que les deux conditions soient vraies. Le mot or accepte qu’au moins l’une soit vraie.
valeurs = [2, 5, 6, 8, 11, 12]
retenues = [x for x in valeurs if x > 5 and x % 2 == 0]
print(retenues) # [6, 8, 12]
print(len(retenues)) # 3
print(sum(retenues)) # 26
Pour un fichier de données, il faut aussi comprendre les en-têtes, les unités, les valeurs manquantes et le champ de la source. La provenance du fichier Insee du site constitue un exemple de documentation à conserver.
6. Utiliser des références de tableur
Une référence relative se décale à la recopie. Une référence absolue, marquée par des dollars, reste fixe.
Une évolution à coefficient constant
B2 contient 100 et E1 contient 1,1. En B3, la formule =B2*$E$1 donne 110. Recopiée vers B4, elle devient =B3*$E$1 et donne 121. B2 évolue, tandis que le coefficient E1 reste fixe.
On peut ajouter une colonne de sommes cumulées et une colonne d’écarts avec une formule explicite. Pour un ajustement statistique, créer d’abord la variable transformée permet de comparer clairement le nuage initial et le nouveau nuage.
Pause mémoire · Recopier sans déplacer le coefficient
Quelle écriture garde E1 fixe dans une formule recopiée ?
Voir le raisonnement et la réponse
$E$1 est une référence absolue : colonne E et ligne 1 sont toutes deux figées.
7. Vérifier sa compréhension
On calcule somme_geometrique(2,3,3). Prévois le résultat sans exécuter le programme, puis vérifie avec la formule du cours.
Afficher la correction
Les trois termes sont 2, 6 et 18 : leur somme vaut 26. La formule donne 2×(3³−1)/(3−1)=26. Après la boucle, le terme suivant vaudrait 54, mais il ne fait pas partie de la somme demandée.
À retenir
Une sortie numérique n’est pas une justification à elle seule. Prévoir un petit cas, suivre les variables et contrôler les cas limites permet de détecter les décalages d’indice et les erreurs de modèle.
La bonne routine pour retenir
Refais demain un tableau de variables. Plus tard, explique l’utilité d’une nouvelle liste pour Pascal et d’une référence absolue dans le tableur.