Pour aller plus loin. Écrire une fonction Python est polaire qui…
Exercice supplémentaire · niveau 3 (difficile) · chimie (première), chapitre 6 — Schémas de Lewis, géométrie et polarité · Liaisons et outils numériques
Énoncé
Pour aller plus loin. Écrire une fonction Python est_polaire qui décide si une entité est polaire, à partir d'une liste de couples formés d'une intensité de moment et d'un vecteur direction. La tester sur , et .
Corrigé
def est_polaire(liaisons, eps=1e-9):
# liaisons : liste de (mu, (x, y, z)) ; le vecteur n'a pas besoin d'etre unitaire
sx = sy = sz = 0.0
for mu, (x, y, z) in liaisons:
n = (x*x + y*y + z*z) ** 0.5
sx += mu * x / n; sy += mu * y / n; sz += mu * z / n
norme = (sx*sx + sy*sy + sz*sz) ** 0.5
return norme > eps, norme
tetra = [(1, 1, 1), (1, -1, -1), (-1, 1, -1), (-1, -1, 1)]
print(est_polaire([(1.5, v) for v in tetra])) # CCl4 -> (False, 0)
print(est_polaire([(1.5, tetra[0])] +
[(0.3, v) for v in tetra[1:]])) # CH3Cl -> (True, 1.2)
print(est_polaire([(2.3, (1, 0, 0)), (2.3, (-1, 0, 0))])) # CO2 -> (False, 0)
: quatre moments égaux sur les quatre directions du tétraèdre, somme nulle. : un moment de et trois de , résultante portée par la liaison — exactement le calcul vectoriel de l'exercice précédent. : deux moments opposés, somme nulle.
Le seuil eps n'est pas décoratif : la somme de quatre flottants ne vaut jamais exactement zéro. Tester norme == 0 déclarerait polaire une fois sur deux, selon l'ordre des additions.
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.