N = m / m_entite n = N / NA
Seconde · Chapitre 8 · TP expérimental et numérique

Compter en pesant

Tu vas d'abord compter des grains de riz sans les compter, avec une balance. Puis tu appliqueras la même idée aux molécules : peser des échantillons du quotidien et faire calculer par Python combien d'entités, et combien de moles, ils contiennent.

≈ 1 h 50 en toutPesées + 5 activités PythonSeul ou en binômePython s'exécute dans la page
← Tous les cours ← Retour au cours
Partie 1
Problématique

Comment connaître le nombre d'entités contenues dans un échantillon, alors qu'elles sont bien trop petites et trop nombreuses pour être comptées ?

Objectifs

  • Compter des objets identiques par pesée.
  • Calculer la masse d'une entité à partir de sa formule.
  • Calculer le nombre d'entités et la quantité de matière d'un échantillon pesé.
  • Écrire et utiliser des fonctions Python pour automatiser ces calculs.

Compétences travaillées

  • Réaliser : peser avec soin, programmer.
  • Analyser : transposer une méthode (riz → molécules).
  • Valider : contrôler un ordre de grandeur.
  • Communiquer : présenter résultats et graphique.
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
Expérience : compter du riz, peser des échantillons
≈ 25 min · en salle de TP

Matériel

  • une balance au 0,01 g et une coupelle ;
  • un paquet de riz (500 g) ;
  • un morceau de sucre, une cuillère de sel, un clou en fer, un fil de cuivre ;
  • une éprouvette graduée et de l'eau.

Protocole

Poser la coupelle et faire la tare (remise à zéro).
Compter 100 grains de riz et les peser. Noter \(m_{100}\).
Peser séparément le morceau de sucre, la cuillère de sel, le clou, le fil de cuivre, puis 20 mL d'eau.
Reporter les masses dans le tableau et dans les programmes.
Échantillon100 grains de rizSucreSelClouCuivre20 mL d'eau
Masse (g)
Si tu ne peux pas faire l'expérience

Valeurs typiques 100 grains de riz : 2,31 g · morceau de sucre : 5,6 g · cuillère de sel : 6,0 g · clou : 3,0 g · fil de cuivre : 8,9 g · 20 mL d'eau : 20,0 g. Ce sont des ordres de grandeur courants ; tes propres pesées peuvent différer.

Q1
Pourquoi pèse-t-on 100 grains plutôt qu'un seul ? Quelle hypothèse fait-on sur les grains ? Cette hypothèse est-elle mieux vérifiée pour des molécules d'une même espèce ?

Un grain pèse environ 0,02 g : avec une balance au 0,01 g, l'incertitude serait de l'ordre de 50 %. Avec 100 grains, l'erreur de 0,01 g ne représente plus que 0,4 % de 2,31 g. On suppose que tous les grains ont la même masse (ou que la masse moyenne de 100 grains représente bien tout le paquet). Pour des molécules d'une même espèce, l'hypothèse est bien meilleure : elles sont toutes identiques (à de petites différences isotopiques près), et leur masse se calcule à partir de la formule.

2
Activité 1 — Combien de grains dans le paquet ?
≈ 10 min · Niveau 1 : variables, calculs, print()
Ce que fait le programme

À partir de la masse de 100 grains, il calcule la masse d'un grain, puis le nombre de grains \(N\) dans le paquet, et enfin le nombre de « paquets de 1 000 grains ». Pourquoi ? C'est exactement la démarche du cours : \(N = m/m_{\text{entité}}\), puis regroupement par paquets (pour les molécules, les paquets sont des moles). Comment lire le résultat ? Un nombre de grains de l'ordre de \(10^{4}\).

À faire : complète les lignes marquées ..., exécute, puis remplace m_100 par ta mesure.

Indice 1 — physique. Si chaque grain pèse m_grain, combien de grains faut-il pour faire m_paquet ?
Indice 2 — calcul. Le nombre de grains est la masse du paquet divisée par la masse d'un grain. Le nombre de paquets de 1 000 est \(N\) divisé par 1 000.
Indice 3 — code. N = m_paquet / m_grain et paquets = N / 1000.
Correction de l'activité 1
m_100 = 2.31
m_paquet = 500

m_grain = m_100 / 100
N = m_paquet / m_grain
paquets = N / 1000

print("masse d'un grain :", m_grain, "g")
print("nombre de grains :", round(N))
print("nombre de paquets de 1000 :", round(paquets, 1))

Résultats attendus. Un grain : 0,0231 g. Le paquet contient environ 21 645 grains, soit 21,6 paquets de 1 000.

Interprétation. On a « compté » plus de 20 000 grains avec deux pesées. Le résultat n'est pas exact au grain près (les grains n'ont pas tous la même masse), mais l'ordre de grandeur est fiable. Pour les molécules, on remplace « paquet de 1 000 » par « mole » (\(6{,}02\times10^{23}\)).

Erreurs fréquentes. Multiplier au lieu de diviser (\(500 \times 0{,}0231 = 11{,}6\) grains : absurde pour un paquet de 500 g) ; oublier de diviser m_100 par 100.

3
Activité 2 — Masse d'une molécule à partir de sa formule
≈ 15 min · Niveau 2 : listes et boucle
Ce que fait le programme

La formule est décrite par deux listes : les masses des atomes et le nombre de chaque atome. La boucle additionne \(\text{nombre} \times \text{masse}\) pour chaque élément. Pourquoi ? C'est la règle du cours, et elle marche pour n'importe quelle formule. Comment lire le résultat ? Une masse en kg, de l'ordre de \(10^{-26}\) à \(10^{-25}\) kg pour une petite molécule.

À faire : complète la ligne dans la boucle, exécute pour le glucose \(\text{C}_6\text{H}_{12}\text{O}_6\), puis adapte la liste nombres pour l'eau \(\text{H}_2\text{O}\) et pour le saccharose \(\text{C}_{12}\text{H}_{22}\text{O}_{11}\).

Indice 1 — chimie. L'élément numéro i apporte nombres[i] atomes, chacun de masse masses[i].
Indice 2 — boucle. À chaque tour, on ajoute quelque chose à m_molecule : m_molecule = m_molecule + …
Indice 3 — code. m_molecule = m_molecule + nombres[i] * masses[i]. Pour l'eau : nombres = [0, 2, 1] ; pour le saccharose : nombres = [12, 22, 11].
Correction de l'activité 2
elements = ["C", "H", "O"]
masses = [1.99e-26, 1.67e-27, 2.66e-26]
nombres = [6, 12, 6]                       # glucose ; eau : [0, 2, 1] ; saccharose : [12, 22, 11]

m_molecule = 0
for i in range(len(elements)):
    m_molecule = m_molecule + nombres[i] * masses[i]
    print(elements[i], ":", nombres[i], "atome(s)")

print("masse d'une molécule :", m_molecule, "kg")

Résultats attendus. Glucose : \(2{,}99\times10^{-25}\) kg (Python affiche 2.9904e-25). Eau : \(2{,}99\times10^{-26}\) kg. Saccharose : \(5{,}68\times10^{-25}\) kg.

Interprétation. Une molécule de glucose (24 atomes) est 10 fois plus lourde qu'une molécule d'eau (3 atomes). L'écriture e-25 de Python signifie \(\times10^{-25}\).

Erreurs fréquentes. Écrire m_molecule = nombres[i] * masses[i] sans m_molecule + : la variable est écrasée à chaque tour et seul le dernier élément compte ; écrire 1,99e-26 avec une virgule.

4
Activité 3 — Quantité de matière en fonction de la masse
≈ 15 min · Niveau 3 : représenter et comparer
Ce que fait le programme

Pour des masses de 0 à 100 g, il calcule la quantité de matière d'eau, de sel et de sucre, et trace les trois courbes \(n = f(m)\). Pourquoi ? Pour voir comment \(n\) dépend de la masse et de l'espèce. Comment le lire ? Des droites passant par l'origine (proportionnalité) ; plus l'entité est légère, plus la droite est pentue.

À faire : complète le calcul de n_sel et de n_sucre, trace les deux courbes manquantes, puis ajoute la légende et les axes.

Indice 1 — physique. Pour chaque espèce : masse en kg (m * 1e-3), divisée par la masse d'une entité, divisée par \(N_A\).
Indice 2 — listes. Recopie le calcul de n_eau en remplaçant m_eau par la bonne masse d'entité.
Indice 3 — code. n_sel.append(m * 1e-3 / m_sel / NA) ; plt.plot(masses_g, n_sel, 's-', color='green', label='sel') ; idem pour le sucre ; plt.xlabel("m (g)"), plt.ylabel("n (mol)"), plt.legend().
Correction de l'activité 3
import matplotlib.pyplot as plt

NA = 6.02e23
m_eau = 2.99e-26
m_sel = 9.71e-26
m_sucre = 5.68e-25

masses_g = []
n_eau = []
n_sel = []
n_sucre = []
for m in range(0, 101, 10):
    masses_g.append(m)
    n_eau.append(m * 1e-3 / m_eau / NA)
    n_sel.append(m * 1e-3 / m_sel / NA)
    n_sucre.append(m * 1e-3 / m_sucre / NA)

plt.plot(masses_g, n_eau, 'o-', color='blue', label='eau')
plt.plot(masses_g, n_sel, 's-', color='green', label='sel')
plt.plot(masses_g, n_sucre, '^-', color='red', label='sucre')
plt.title("Quantité de matière en fonction de la masse")
plt.xlabel("m (g)")
plt.ylabel("n (mol)")
plt.legend()
plt.grid()
plt.show()

Résultat attendu. Trois droites passant par l'origine. Pour 100 g : 5,6 mol d'eau, 1,7 mol de sel, 0,29 mol de sucre.

Interprétation. \(n\) est proportionnelle à la masse pour une espèce donnée : doubler la masse double le nombre d'entités. La pente dépend de l'espèce : l'eau, dont la molécule est la plus légère, a la droite la plus pentue. La masse seule ne suffit donc pas à comparer des quantités de matière : il faut connaître l'espèce.

Erreurs fréquentes. Oublier * 1e-3 (valeurs 1 000 fois trop grandes) ; utiliser m_eau dans les trois calculs (trois courbes confondues).

5
Activité 4 — Un compteur d'entités pour tous les échantillons
≈ 20 min · Niveau 4 : fonctions, dictionnaire
Ce que fait le programme

Un dictionnaire MASSE associe à chaque symbole la masse de l'atome : MASSE["O"] vaut \(2{,}66\times10^{-26}\). La fonction masse_entite calcule la masse d'une entité à partir de sa composition ; la fonction quantite, à compléter, calcule \(N\) et \(n\) pour un échantillon pesé. Pourquoi ? Une fonction écrite une fois sert pour tous les échantillons. Comment lire le résultat ? Une ligne par échantillon de la partie 1.

À faire : complète les deux lignes de la fonction quantite, exécute, puis remplace les masses par tes pesées. Réponds à Q2.

Indice 1 — physique. \(N = \dfrac{m_{\text{échantillon}}}{m_{\text{entité}}}\), les deux masses en kg ; puis \(n = N/N_A\).
Indice 2 — fonctions. La masse de l'entité s'obtient en appelant masse_entite(symboles, nombres). La masse de l'échantillon m_g est en grammes.
Indice 3 — code. N = m_g * 1e-3 / masse_entite(symboles, nombres) et n = N / NA.
Correction de l'activité 4
NA = 6.02e23
MASSE = {"H": 1.67e-27, "C": 1.99e-26, "O": 2.66e-26, "Na": 3.82e-26,
         "Cl": 5.89e-26, "Fe": 9.27e-26, "Cu": 1.06e-25}

def masse_entite(symboles, nombres):
    m = 0
    for i in range(len(symboles)):
        m = m + nombres[i] * MASSE[symboles[i]]
    return m

def quantite(m_g, symboles, nombres):
    N = m_g * 1e-3 / masse_entite(symboles, nombres)
    n = N / NA
    return N, n

echantillons = [
    ["eau (20 mL)", 20.0, ["H", "O"], [2, 1]],
    ["sucre (1 morceau)", 5.6, ["C", "H", "O"], [12, 22, 11]],
    ["sel (1 cuillère)", 6.0, ["Na", "Cl"], [1, 1]],
    ["clou en fer", 3.0, ["Fe"], [1]],
    ["fil de cuivre", 8.9, ["Cu"], [1]],
]

for e in echantillons:
    N, n = quantite(e[1], e[2], e[3])
    print(e[0], ":", e[1], "g ->", "N =", "{:.2e}".format(N), "; n =", "{:.3g}".format(n), "mol")

Résultats attendus.

Échantillon\(N\)\(n\) (mol)
eau, 20,0 g\(6{,}68\times10^{23}\)1,11
sucre, 5,6 g\(9{,}86\times10^{21}\)0,0164
sel, 6,0 g\(6{,}18\times10^{22}\)0,103
fer, 3,0 g\(3{,}24\times10^{22}\)0,0538
cuivre, 8,9 g\(8{,}40\times10^{22}\)0,139

Interprétation. 20 mL d'eau contiennent à peu près une mole de molécules. Le morceau de sucre, plus lourd que le clou, contient pourtant moins d'entités : ses molécules sont très lourdes (45 atomes). La notation "{:.2e}".format(N) affiche un nombre en écriture scientifique avec 2 décimales.

Erreurs fréquentes. Oublier la conversion en kg (\(N\) et \(n\) 1 000 fois trop grands : 1 110 mol pour 20 mL d'eau !) ; écrire n = N * NA.

Q2
Quel échantillon contient le plus d'entités ? Le morceau de sucre (5,6 g) contient-il plus ou moins d'entités que le clou (3,0 g) ? Explique.

L'eau : 20 g de molécules très légères (\(2{,}99\times10^{-26}\) kg), soit 1,11 mol. Le sucre contient moins d'entités que le clou (0,016 mol contre 0,054 mol), bien qu'il soit presque deux fois plus lourd : une molécule de saccharose (\(5{,}68\times10^{-25}\) kg) pèse environ 6 fois plus qu'un atome de fer (\(9{,}27\times10^{-26}\) kg). Le nombre d'entités dépend de la masse de l'échantillon et de la masse d'une entité.

6
Activité 5 — Le programme de Lina
≈ 15 min · Niveau 5 : trouver et corriger des erreurs
La situation

Lina veut calculer la quantité de matière contenue dans 10 g d'eau. Son programme contient quatre erreurs : deux l'empêchent de fonctionner, deux donnent un résultat faux sans message. Corrige une erreur à la fois. Ordre de grandeur attendu : 10 g, c'est la moitié de l'échantillon de 20 mL de l'activité 4.

Indice 1 — méthode. Corrige d'abord ce que Python signale, ligne par ligne. Quand le programme tourne, compare à l'ordre de grandeur attendu : environ 0,5 mol.
Indice 2 — où chercher. Regarde de près les noms de variables (lettre O ou chiffre 0 ?), l'écriture des nombres décimaux en Python, l'unité de la masse de l'échantillon, et le sens du calcul de \(n\).
Indice 3 — les quatre corrections. m0 → mO ; NA = 6.02e23 (point décimal) ; N = 10e-3 / m_eau ; n = N / NA.
Correction de l'activité 5
mH = 1.67e-27
mO = 2.66e-26
NA = 6.02e23                 # erreur 2 : point décimal

m_eau = 2 * mH + mO          # erreur 1 : lettre O, pas le chiffre 0
N = 10e-3 / m_eau            # erreur 3 : masse en kg
n = N / NA                   # erreur 4 : on divise par NA
print("n =", n, "mol")

Erreur 1 (bloquante). m0 (avec un zéro) n'existe pas : NameError. La variable s'appelle mO (lettre O).

Erreur 2 (bloquante). NA = 6,02e23 ne crée pas un nombre : la virgule fabrique un couple de deux valeurs (6 et \(2\times10^{23}\)). Python refuse ensuite de le multiplier par N : TypeError.

Erreur 3 (silencieuse). 10 est en grammes alors que m_eau est en kg : \(N\) est 1 000 fois trop grand.

Erreur 4 (silencieuse). \(n = N \times N_A\) au lieu de \(N/N_A\).

Résultat après correction. \(n \approx 0{,}555\ \text{mol}\). Avec seulement les erreurs 1 et 2 corrigées, le programme affichait environ \(2\times10^{50}\) mol ; avec l'erreur 4 corrigée mais pas la 3, 555 mol. Les deux sont absurdes pour 10 g d'eau.

Q3
Après correction des erreurs bloquantes, comment pouvait-on savoir que le résultat était faux, sans connaître la bonne réponse ?

Deux contrôles simples : \(n\) doit être beaucoup plus petit que \(N\) (une mole est un paquet énorme), or \(2\times10^{50}\) est plus grand que \(N\) ; et 10 g d'eau, c'est la moitié des 20 mL de l'activité 4 (1,11 mol), donc environ 0,55 mol. Un résultat de \(10^{50}\) ou même de 555 mol pour une cuillerée d'eau est absurde.

7
Conclusion et auto-évaluation
≈ 10 min
Q4
Réponds à la problématique : comment compte-t-on des entités trop petites et trop nombreuses pour être comptées une à une ?

Comme pour le riz, on compte en pesant. On calcule la masse d'une entité à partir de sa formule (somme des masses des atomes), on pèse l'échantillon, et on divise : \(N = m_{\text{échantillon}}/m_{\text{entité}}\). Ces nombres étant gigantesques (\(10^{21}\) à \(10^{24}\) pour des objets du quotidien), on les regroupe par paquets de \(N_A = 6{,}02\times10^{23}\) : la quantité de matière \(n = N/N_A\) s'exprime alors en moles, avec des valeurs faciles à manipuler (0,016 mol pour un sucre, 1,1 mol pour 20 mL d'eau).

Grille d'auto-évaluation

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

CompétenceABCD
Peser avec une balance (tare, précision)
Calculer la masse d'une entité à partir de sa formule
Calculer N et n pour un échantillon pesé
Utiliser une boucle pour additionner
Compléter et utiliser une fonction
Contrôler un résultat par son ordre de grandeur
Clique sur A, B, C ou D pour chaque compétence.
Fiche professeur

Organisation

Durée totale estimée : 110 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

Balances au 0,01 g, paquets de riz, échantillons de sucre, sel, fer, cuivre ; données des masses d'entités imprimées.

Sécurité

Pas de risque particulier.

Points de vigilance

Distinguer masse d'une entité et masse de l'échantillon. La masse molaire n'est qu'évoquée (programme de Première).

Différenciation

Aide : Partir du riz (compter 100 grains, peser) avant de passer aux atomes ; fournir les masses des atomes.

Approfondissement : Estimer le nombre de molécules d'eau dans une goutte (0,05 mL) ; comparer au nombre d'humains sur Terre.

Évaluation (sur 20)

Calcul de N et de n (activités 3 et 4, 8 pts) ; Q5 (6 pts) ; activité 5 (4 pts) ; méthode du riz (2 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, 8 et 10, puis le quiz du cours.

Exercices corrigés Retour au cours