Un programme à compléter
Exercice supplémentaire · niveau 2 · enseignement scientifique (terminale), chapitre 7 — La biodiversité et son évolution
Énoncé
On veut vérifier numériquement la loi de Hardy-Weinberg. Le programme suivant est incomplet ; les points d'interrogation sont à remplacer.
gen = {"AA": 0.50, "Aa": 0.10, "aa": 0.40}
for n in range(4):
print(n, gen)
p = ???
q = ???
gen = {"AA": ???, "Aa": ???, "aa": ???}
1. Compléter les cinq expressions. 2. Que devrait afficher le programme ? 3. Un élève écrit q = 1 - p au lieu de la formule attendue. Est-ce une erreur ? 4. Un autre écrit "Aa": p * q. Quelle erreur commet-il, et comment la détecter automatiquement ? 5. Comment modifier le programme pour introduire une sélection contre les individus aa ?
Corrigé
1.
p = gen["AA"] + gen["Aa"] / 2
q = gen["aa"] + gen["Aa"] / 2
gen = {"AA": p * p, "Aa": 2 * p * q, "aa": q * q}
2. La génération affiche ; ; , puis les générations , et affichent toutes ; ; .
3. Non, c'est correct et plus robuste, puisque dès que les trois fréquences somment à . Les deux écritures donnent le même résultat. La formule complète a toutefois un mérite pédagogique : elle rappelle d'où viennent les allèles .
4. Il oublie le facteur de l'hétérozygote. La détection est immédiate : la somme des trois fréquences ne vaut plus mais , soit dans notre cas. Ajouter au programme une ligne de contrôle assert abs(sum(gen.values()) - 1) < 1e-9 arrête l'exécution dès la première génération fautive. Écrire un contrôle qui vérifie une propriété connue est le meilleur moyen de débusquer une erreur de formule.
5. Il faut multiplier la fréquence des aa par un coefficient de survie inférieur à , puis renormaliser pour que la somme fasse de nouveau :
gen["aa"] = gen["aa"] * 0.8 # 20 % des aa ne se reproduisent pas
total = sum(gen.values())
gen = {g: f / total for g, f in gen.items()}
En relançant, on constate que diminue de génération en génération : le modèle n'est plus à l'équilibre, et l'on voit la sélection à l'œuvre. C'est exactement ce que le programme entend par « analyser une situation d'évolution biologique expliquant un écart au modèle ».
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.