Adloun

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.