liaisons = 8 - v H–O–H
Seconde · Chapitre 6 · TP expérimental et numérique

Modèles moléculaires et schémas de Lewis

Tu vas construire des molécules avec une boîte de modèles, découvrir pourquoi chaque atome a un nombre de « trous » bien précis, puis faire prévoir par Python les liaisons, les doublets et les charges des ions.

≈ 1 h 45 en toutModèles moléculaires + 5 activités PythonSeul ou en binômePython s'exécute dans la page
← Tous les cours ← Retour au cours
Partie 1
Problématique

Pourquoi un atome de carbone forme-t-il toujours 4 liaisons, et un atome d'hydrogène une seule ? Peut-on prévoir la structure d'une molécule, ou la charge d'un ion, à partir du seul numéro atomique ?

Objectifs

  • Construire des molécules simples avec des modèles moléculaires.
  • Relier le nombre de liaisons d'un atome à son nombre d'électrons de valence.
  • Établir et vérifier des schémas de Lewis.
  • Utiliser Python pour prévoir liaisons, doublets non liants et charges des ions.

Compétences travaillées

  • Réaliser : construire un modèle, programmer.
  • Analyser : repérer une régularité dans un tableau.
  • Valider : vérifier la règle de l'octet, critiquer un modèle.
  • Communiquer : présenter un graphique légendé.
L'éditeur Python de cette page

Le code s'exécute réellement dans ton navigateur. Au premier clic sur ▶ Exécuter, Python se télécharge (≈ 7 Mo, une seule fois, connexion Internet nécessaire). Le bouton Télécharger .py donne un fichier utilisable dans EduPython, Thonny, Basthon ou Capytale.

Raccourcis : Ctrl + Entrée exécute, Tab décale la ligne de 4 espaces.

Choisis ton parcours

Débutant en Python : fais les cinq activités dans l'ordre, en t'aidant des indices. À l'aise avec les variables et les boucles (en général à partir du deuxième trimestre) : l'activité 1 est facultative, commence directement à l'activité 2 et vise l'activité 5 sans indice.

1
Manipulation : construire des molécules
≈ 20 min · en salle de TP

Matériel

  • une boîte de modèles moléculaires : boules blanches (H), noires (C), bleues (N), rouges (O) ;
  • des liaisons rigides (courtes) et des liaisons souples (pour les liaisons doubles et triples).

Code couleur usuel des boîtes de modèles. Vérifie celui de ta boîte : il peut varier selon le fabricant.

Protocole

Compter le nombre de trous de chaque type de boule et compléter la première ligne du tableau.
Construire \(\text{H}_2\), \(\text{H}_2\text{O}\), \(\text{NH}_3\) et \(\text{CH}_4\) en remplissant tous les trous.
Construire \(\text{CO}_2\) puis \(\text{N}_2\) : il faut utiliser des liaisons souples, deux ou trois entre les mêmes boules.
Pour chaque molécule, dessiner le schéma de Lewis correspondant.
AtomeHCNO
Trous
Valence1456
Manquants (duet / octet)
Si tu ne disposes pas de boîte de modèles

Observation de référence Dans les boîtes usuelles, la boule H a 1 trou, C en a 4, N en a 3 et O en a 2. Tu peux aussi utiliser la simulation « Schémas de Lewis » du cours.

Q1
Compare le nombre de trous de chaque boule au nombre d'électrons qui manquent à l'atome pour atteindre le duet ou l'octet. Que constates-tu ? Pourquoi a-t-on besoin de liaisons souples pour CO₂ et N₂ ?

Il manque 1 électron à H (duet), 4 à C, 3 à N et 2 à O (octet) : c'est exactement le nombre de trous. Chaque liaison covalente apporte un électron de plus à l'atome (l'autre électron du doublet vient du partenaire) : un atome forme donc autant de liaisons qu'il lui manque d'électrons. Dans CO₂, le carbone doit former 4 liaisons avec seulement 2 atomes d'oxygène : il faut deux liaisons doubles. Dans N₂, chaque azote doit en former 3 avec un seul partenaire : liaison triple. Les liaisons rigides ne permettent pas de relier deux fois les mêmes boules.

2
Activité 1 — Liaisons et doublets d'un atome
≈ 10 min · Niveau 1 : variables, calculs, print()
Ce que fait le programme

À partir du nombre \(v\) d'électrons de valence, il calcule le nombre de liaisons (\(8 - v\)) et le nombre de doublets non liants. Pourquoi ? Pour savoir comment dessiner l'atome dans un schéma de Lewis. Comment lire le résultat ? Deux nombres entiers : par exemple 2 liaisons et 2 doublets non liants pour l'oxygène.

Le raisonnement à programmer

Chaque liaison utilise 1 électron de valence de l'atome. Les électrons restants, \(v - \text{liaisons}\), se groupent par deux en doublets non liants.

À faire :

  1. Exécute : le programme affiche 0 doublet non liant pour l'oxygène, ce qui est faux. Remplace le 0 par le bon calcul.
  2. Change le nom et la valeur de v pour l'azote (5), le carbone (4) et le chlore (7). Note les résultats.
  3. Ajoute une ligne qui calcule et affiche le nombre total d'électrons autour de l'atome : \(2 \times (\text{liaisons} + \text{non liants})\). Que trouves-tu à chaque fois ?
Indice 1 — chimie. L'oxygène a 6 électrons de valence. Il en utilise 2 dans ses 2 liaisons. Il en reste 4, soit 2 paires.
Indice 2 — calcul. Électrons restants : v - liaisons. Pour compter des paires, on divise par 2. Avec //, Python donne un résultat entier.
Indice 3 — code. non_liants = (v - liaisons) // 2, puis total = 2 * (liaisons + non_liants) et print("électrons autour :", total).
Correction de l'activité 1
nom = "oxygène"
v = 6

liaisons = 8 - v
non_liants = (v - liaisons) // 2
total = 2 * (liaisons + non_liants)

print(nom, ":", v, "électrons de valence")
print("liaisons :", liaisons)
print("doublets non liants :", non_liants)
print("électrons autour :", total)

Résultats attendus. Oxygène : 2 liaisons, 2 doublets non liants. Azote : 3 et 1. Carbone : 4 et 0. Chlore : 1 et 3. Le total vaut 8 à chaque fois.

Interprétation. Le programme retrouve la règle de l'octet : quel que soit l'atome, liaisons et doublets non liants l'entourent de 8 électrons. Ce sont aussi les nombres de trous des boules du modèle moléculaire.

Erreurs fréquentes. Oublier de diviser par 2 (on compterait des électrons au lieu de doublets) ; utiliser / qui donne 2.0 au lieu de 2 (le résultat reste juste, mais il s'affiche avec une virgule).

3
Activité 2 — Tableau pour plusieurs atomes
≈ 15 min · Niveau 2 : listes, boucle, condition
Ce que fait le programme

Il refait le calcul de l'activité 1 pour six atomes à la suite, grâce à une boucle. Pourquoi ? Pour comparer les atomes et repérer une régularité. Attention : l'hydrogène suit la règle du duet (2 électrons), pas celle de l'octet. Comment lire le résultat ? Une ligne par atome.

À faire : exécute d'abord le programme tel quel. Que trouve-t-il pour l'hydrogène ? Complète ensuite la condition pour traiter l'hydrogène correctement, puis réponds à Q2.

Indice 1 — chimie. L'hydrogène veut 2 électrons autour de lui (comme l'hélium), pas 8.
Indice 2 — condition. Dans la branche if, on remplace 8 par 2.
Indice 3 — code. liaisons = 2 - v dans la branche de l'hydrogène.
Correction de l'activité 2
symboles = ["H", "C", "N", "O", "F", "Cl"]
valences = [1, 4, 5, 6, 7, 7]

for i in range(len(symboles)):
    v = valences[i]
    if symboles[i] == "H":
        liaisons = 2 - v        # duet
    else:
        liaisons = 8 - v        # octet
    non_liants = (v - liaisons) // 2
    print(symboles[i], ": v =", v, "| liaisons :", liaisons, "| doublets non liants :", non_liants)

Résultats attendus. Avant correction, H a 7 liaisons et −3 doublets non liants : absurde. Après correction : H 1 et 0 ; C 4 et 0 ; N 3 et 1 ; O 2 et 2 ; F 1 et 3 ; Cl 1 et 3.

Interprétation. F et Cl ont le même résultat : ils sont dans la même colonne du tableau périodique (7 électrons de valence). Quand le nombre de liaisons diminue, le nombre de doublets non liants augmente.

Erreurs fréquentes. Écrire symboles[i] = "H" (un seul = sert à affecter, la comparaison s'écrit ==) ; oublier les deux-points après if et else.

Q2
Pourquoi le fluor et le chlore donnent-ils exactement le même résultat ? Quel résultat absurde le programme donnait-il pour l'hydrogène avant correction, et comment pouvait-on le repérer ?

F et Cl ont tous les deux 7 électrons de valence (même colonne) : ils forment 1 liaison et portent 3 doublets non liants, comme dans HF et HCl. Avant correction, l'hydrogène avait 7 liaisons et un nombre négatif de doublets non liants (−3) : un nombre négatif de doublets n'a pas de sens, et la boule H n'a qu'un seul trou. Un résultat impossible signale toujours une erreur dans le modèle ou dans le programme.

4
Activité 3 — Liaison simple, double ou triple : laquelle est la plus solide ?
≈ 15 min · Niveau 3 : représenter et comparer deux séries
Ce que fait le programme

Il trace l'énergie de liaison en fonction du nombre de doublets liants entre deux atomes (1 : simple, 2 : double, 3 : triple), pour le carbone (C–C, C=C, C≡C) et pour l'azote (N–N, N=N, N≡N). Pourquoi ? Pour savoir si une liaison triple vaut « trois liaisons simples ». Comment lire le résultat ? Si l'énergie était proportionnelle au nombre de doublets, les points seraient alignés sur une droite passant par l'origine.

Données

Valeurs moyennes des tables de données Énergies de liaison en eV : C–C 3,61 · C=C 6,36 · C≡C 8,70 · N–N 1,69 · N=N 4,33 · N≡N 9,79.

À faire : complète la liste E_N, trace la deuxième série, ajoute la légende, le titre et les axes avec unités. Puis complète le calcul du rapport « triple / simple » pour chaque élément.

Indice 1 — physique-chimie. Une liaison triple serait « trois liaisons simples » si son énergie valait exactement 3 fois celle de la liaison simple. Le rapport triple / simple permet de le vérifier.
Indice 2 — listes. E_N est une liste de 3 nombres, dans l'ordre simple, double, triple. Le premier élément est E_N[0], le dernier E_N[2].
Indice 3 — code. E_N = [1.69, 4.33, 9.79] ; plt.plot(doublets, E_N, 's-', color='blue', label='azote') ; rapport_N = E_N[2] / E_N[0].
Correction de l'activité 3
import matplotlib.pyplot as plt

doublets = [1, 2, 3]
E_C = [3.61, 6.36, 8.70]
E_N = [1.69, 4.33, 9.79]

plt.plot(doublets, E_C, 'o-', color='black', label='carbone')
plt.plot(doublets, E_N, 's-', color='blue', label='azote')
plt.title("Énergie de liaison selon le nombre de doublets liants")
plt.xlabel("nombre de doublets liants")
plt.ylabel("énergie de liaison (eV)")
plt.legend()
plt.grid()
plt.show()

rapport_C = E_C[2] / E_C[0]
rapport_N = E_N[2] / E_N[0]
print("C : triple / simple =", round(rapport_C, 1))
print("N : triple / simple =", round(rapport_N, 1))

Résultats attendus. Deux courbes croissantes. Rapports : 2,4 pour le carbone, 5,8 pour l'azote.

Interprétation. Plus il y a de doublets liants entre deux atomes, plus la liaison est solide. Mais l'énergie n'est pas proportionnelle au nombre de doublets : pour le carbone, la triple vaut moins de 3 simples (2,4) ; pour l'azote, elle en vaut presque 6. Cela explique la grande stabilité du diazote \(\text{N}_2\), qui forme 78 % de l'air et réagit très peu.

Erreurs fréquentes. Confondre E_N[0] (premier élément) et E_N[1] (deuxième) ; oublier plt.legend().

5
Activité 4 — Prévoir la charge des ions de Z = 1 à 18
≈ 20 min · Niveau 4 : fonctions, modéliser une règle
Ce que fait le programme

La fonction valence(Z), déjà écrite, remplit les sous-couches 1s, 2s, 2p, 3s, 3p et compte les électrons de la dernière couche. La fonction charge(Z), à compléter, applique la règle du cours : avec 1 à 3 électrons de valence, l'atome les perd ; avec 5 à 7, il gagne ce qui manque pour 8. Pourquoi ? Pour retrouver d'un coup tous les ions des trois premières lignes du tableau périodique. Comment lire le résultat ? Une ligne par élément, avec l'ion prévu.

À faire : complète les deux return ... de la fonction charge, exécute, puis compare les prévisions avec les ions du cours (Na⁺, Mg²⁺, Al³⁺, O²⁻, F⁻, Cl⁻…). Réponds à Q3.

Indice 1 — chimie. Le sodium (v = 1) perd 1 électron : charge +1. Le chlore (v = 7) en gagne 1 : charge −1. L'oxygène (v = 6) en gagne 2 : charge −2.
Indice 2 — fonction. Perdre \(v\) électrons donne une charge \(+v\). Gagner \(8 - v\) électrons donne une charge \(-(8 - v)\).
Indice 3 — code. return v dans le premier cas, return -(8 - v) dans le second.
Correction de l'activité 4 (fonction charge)
symboles = ["H", "He", "Li", "Be", "B", "C", "N", "O", "F",
            "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar"]

def valence(Z):
    sous_couches = [(1, 2), (2, 2), (2, 6), (3, 2), (3, 6)]
    reste = Z
    n_max = 1
    v = 0
    for n, capacite in sous_couches:
        if reste == 0:
            break
        e = min(reste, capacite)
        reste = reste - e
        if n > n_max:
            n_max = n
            v = 0
        v = v + e
    return v

def charge(Z):
    v = valence(Z)
    if Z == 2 or Z == 10 or Z == 18:
        return 0
    if v <= 3:
        return v               # perd v électrons
    if v >= 5:
        return -(8 - v)        # gagne 8 - v électrons
    return None

def ecrire_ion(symbole, q):
    if q is None:
        return "pas d'ion courant"
    if q == 0:
        return "pas d'ion (gaz noble)"
    signe = "+" if q > 0 else "-"
    nombre = "" if abs(q) == 1 else str(abs(q))
    return symbole + nombre + signe

for Z in range(1, 19):
    s = symboles[Z - 1]
    print("Z =", Z, "|", s, "| v =", valence(Z), "|", ecrire_ion(s, charge(Z)))

Résultats attendus. H+, Li+, Be2+, B3+, N3-, O2-, F-, Na+, Mg2+, Al3+, P3-, S2-, Cl- ; « pas d'ion courant » pour C et Si ; « pas d'ion (gaz noble) » pour He, Ne et Ar. (Le programme écrit les charges sur la ligne, par exemple Mg2+ pour \(\text{Mg}^{2+}\).)

Interprétation. Les éléments d'une même colonne donnent des ions de même charge : Li⁺ et Na⁺, O²⁻ et S²⁻, F⁻ et Cl⁻. Le programme retrouve tous les ions du cours. Mais un modèle a des limites : le bore, par exemple, ne forme pas d'ion B³⁺ dans ses composés courants ; il forme des liaisons covalentes. Une prévision doit toujours être confrontée à l'expérience.

Erreurs fréquentes. Écrire return 8 - v (charge positive pour un atome qui gagne des électrons) ; placer le test des gaz nobles après le test v <= 3 : l'hélium, avec v = 2, deviendrait He²⁺.

Q3
Quels ions prévus par le programme retrouves-tu dans le cours ? Pourquoi la vérification « gaz noble » doit-elle être faite en premier ? Le programme peut-il se tromper ?

On retrouve Li⁺, Na⁺, Mg²⁺, Al³⁺, O²⁻, S²⁻, F⁻ et Cl⁻. L'hélium a 2 électrons de valence : sans le test placé en premier, la règle « v ≤ 3 » prévoirait He²⁺, alors que sa couche est déjà complète (duet). Le programme applique un modèle simplifié : il prévoit B³⁺ ou Be²⁺, qui ne se rencontrent pas dans les composés usuels de ces éléments. Le modèle est très fiable pour les colonnes 1, 2, 16 et 17, moins pour les autres.

6
Activité 5 — Le programme d'Inès
≈ 15 min · Niveau 5 : trouver et corriger des erreurs
La situation

Inès veut afficher, pour H, C, N et O, le nombre de liaisons, de doublets non liants et le nombre total d'électrons autour de l'atome. Son programme contient quatre erreurs : deux l'empêchent de fonctionner, deux donnent des résultats faux sans message. Corrige une erreur à la fois. Pour les erreurs silencieuses, vérifie la règle du duet et de l'octet.

Indice 1 — méthode. Corrige d'abord ce que Python signale. Quand le programme tourne, vérifie chaque ligne : H doit avoir 2 électrons autour de lui, les autres 8.
Indice 2 — où chercher. Un texte entre guillemets doit être refermé. Le nom d'une variable doit être écrit exactement comme lors de sa création. Relis le calcul des liaisons pour H, et celui des doublets (des électrons ou des paires ?).
Indice 3 — les quatre corrections. Fermer le guillemet avant la dernière parenthèse ; non_liant → non_liants ; liaisons = 2 - v pour H ; non_liants = (v - liaisons) // 2.
Correction de l'activité 5
atomes = ["H", "C", "N", "O"]
valences = [1, 4, 5, 6]

for i in range(len(atomes)):
    v = valences[i]
    if atomes[i] == "H":
        liaisons = 2 - v                  # erreur 3 : H suit la règle du duet
    else:
        liaisons = 8 - v
    non_liants = (v - liaisons) // 2      # erreur 4 : on compte des paires
    total = 2 * (liaisons + non_liants)
    print(atomes[i], ":", liaisons, "liaison(s),", non_liants, "doublet(s) non liant(s), total", total, "électrons")
    # erreurs 1 et 2 : guillemet refermé, nom de variable corrigé

Erreur 1 (bloquante). Le dernier texte "électrons) n'a pas de guillemet fermant : erreur d'écriture, Python ne lance même pas le programme.

Erreur 2 (bloquante). La variable s'appelle non_liants mais le print utilise non_liant : Python ne connaît pas ce nom.

Erreur 3 (silencieuse). Pour H, \(8 - 1 = 7\) liaisons : impossible, l'hydrogène n'en forme qu'une (duet).

Erreur 4 (silencieuse). v - liaisons compte des électrons, pas des doublets. Avant correction, O affiche 4 doublets non liants et 12 électrons autour de lui, au lieu de 2 et 8.

Résultat après correction. H : 1 liaison, 0 doublet non liant, 2 électrons ; C : 4, 0, 8 ; N : 3, 1, 8 ; O : 2, 2, 8.

Q4
Une fois les erreurs 1 et 2 corrigées, le programme affiche-t-il des valeurs plausibles ? Quels tests simples permettent de repérer les erreurs 3 et 4 ?

Non : H a 7 liaisons et −6 doublets non liants ; N affiche 2 doublets et 10 électrons, O 4 doublets et 12 électrons. Deux tests suffisent : le total doit valoir 2 pour H et 8 pour les autres (règles du duet et de l'octet) ; le nombre de liaisons doit correspondre au nombre de trous des modèles moléculaires (1 pour H). Attention : pour H, le total vaut 2 malgré l'erreur (7 − 6 = 1 doublet), c'est le nombre de liaisons et le nombre négatif de doublets qui trahissent l'erreur.

7
Conclusion et auto-évaluation
≈ 10 min
Q5
Réponds à la problématique : pourquoi C forme-t-il 4 liaisons et H une seule ? Que peut-on prévoir à partir du seul numéro atomique ?

Un atome cherche à obtenir la configuration du gaz noble le plus proche : 2 électrons pour H (duet), 8 pour C, N, O… (octet). Chaque liaison covalente lui apporte un électron de plus. Le carbone, avec 4 électrons de valence, doit former 4 liaisons ; l'hydrogène, avec 1 électron, n'en forme qu'une. Les modèles moléculaires traduisent cette règle par le nombre de trous des boules. À partir de \(Z\), on écrit la configuration électronique et on compte les électrons de valence : on peut alors prévoir le nombre de liaisons et de doublets non liants d'un atome, ou la charge de l'ion qu'il forme. Ces prévisions sont fiables pour les éléments les plus courants, mais restent un modèle à confronter à l'expérience.

Grille d'auto-évaluation

A = je sais faire seul · B = avec un peu d'aide · C = partiellement · D = à retravailler.

CompétenceABCD
Construire une molécule avec des modèles moléculaires
Relier le nombre de liaisons aux électrons de valence
Établir et vérifier un schéma de Lewis
Utiliser une condition et une boucle en Python
Compléter une fonction qui modélise une règle
Repérer une erreur silencieuse grâce à une règle de vérification
Clique sur A, B, C ou D pour chaque compétence.
Fiche professeur

Organisation

Durée totale estimée : 105 min. En séance de 1 h 30 : partie expérimentale et activités 1 à 3 ; activités 4 et 5 et conclusion en fin de séance, à la maison ou en séance suivante. Le parcours « à l'aise » (activité 1 facultative) fait gagner environ 10 min.

Préparation

Vérifier le contenu des boîtes de modèles moléculaires (nombre de boules par couleur, liaisons souples pour les doubles liaisons).

Sécurité

Pas de risque particulier.

Points de vigilance

Le code couleur peut varier selon le fabricant : le faire vérifier en début de séance. Insister sur les doublets non liants, souvent oubliés dans les schémas de Lewis.

Différenciation

Aide : Donner le nombre d'électrons de valence de H, C, N, O ; faire construire d'abord H₂O et CH₄ avant les autres molécules.

Approfondissement : Construire le dioxyde de carbone et l'éthène (liaisons doubles) ; prolonger vers la géométrie des molécules (Première).

Évaluation (sur 20)

Schémas de Lewis justes (activités 3 et 4, 8 pts) ; activité 5 (4 pts) ; Q5 (4 pts) ; maquettes construites (4 pts).

Les corrections détaillées des activités Python et des questions sont dans les encadrés de chaque partie.

TP terminé, bravo !

Pour consolider : exercices 5, 7 et 8, puis le quiz du cours.

Exercices corrigés Retour au cours