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é.
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.
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.
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
| Atome | H | C | N | O |
|---|---|---|---|---|
| Trous | ||||
| Valence | 1 | 4 | 5 | 6 |
| Manquants (duet / octet) |
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.
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.
À 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.
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 :
- Exécute : le programme affiche 0 doublet non liant pour l'oxygène, ce qui est faux. Remplace le 0 par le bon calcul.
- Change le nom et la valeur de
vpour l'azote (5), le carbone (4) et le chlore (7). Note les résultats. - 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 ?
v - liaisons. Pour compter des paires, on divise par 2. Avec //, Python donne un résultat entier.non_liants = (v - liaisons) // 2, puis total = 2 * (liaisons + non_liants) et print("électrons autour :", total).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).
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.
if, on remplace 8 par 2.liaisons = 2 - v dans la branche de l'hydrogène.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.
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.
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.
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.
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].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].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().
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.
return v dans le premier cas, return -(8 - v) dans le second.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²⁺.
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.
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.
non_liant → non_liants ; liaisons = 2 - v pour H ; non_liants = (v - liaisons) // 2.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.
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.
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étence | A | B | C | D |
|---|---|---|---|---|
| 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 |
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.
Pour consolider : exercices 5, 7 et 8, puis le quiz du cours.
Exercices corrigés Retour au cours