Fiche n°1 : Réactif limitant, boucle while
et fonction¶
On utilise ici le langage Python pour déterminer l’avancement maximal et identifier le réactif limitant à partir de la donnée des quantités de matière initiales pour une équation de réaction donnée. D’un point de vue chimique, on illustre les notions d’équivalence et de réactif limitant. D’un point de vue algorithmique, c’est l’occasion d’utiliser une boucle while
et ainsi d’appréhender la gestion d’une condition d’arrêt qui n’est pas connue a priori.
Capacité numérique mise en œuvre : Déterminer la composition de l’état final d’un système siège d’une transformation chimique totale à l’aide d’un langage de programmation.
Premier exemple, fonction input, première boucle¶
La transformation est modélisée par la réaction d’équation :
$$I_2(aq) + 2 S_2O_3^{2-}(aq) → 2 I^-(aq) + S_4O_6^{2-}(aq)$$
Le script débute par la saisie des quantités de matière apportées des deux réactifs (
nI2_0
etnS2O3_0
). Pour obtenir une activité interactive et dynamique, on fait entrer ces quantités dans le programme grâce à la fonctioninput
. Ainsi, à chaque fois que l’utilisateur lancera le programme, il pourra entrer un nouveau jeu de concentrations initiales. L’instructionfloat
convertit simplement les concentrations en flottants pour le traitement.L’avancement est ensuite initialisé à la valeur
x = 0
mol, et un incrément est entré (a = 0,001
mol ici).Une fonction,
limitant
, initialement vide, aura vocation à lister le nom du (ou des) réactifs limitants selon la composition du mélange initial. Les listesqI2
etqS2O3
servent à recueillir les quantités de matière successives de ces deux réactifs.Le script opère ensuite par augmentation progressive de l’avancement tant que les deux réactifs sont présents. La boucle conditionnelle
while
permet d’indiquer à Python qu’il doit poursuivre la réaction tant que les quantités de matière des deux réactifs sont positives. La fonctionappend
sert à stocker chaque nouvelle valeur de quantité de matière dans les listes créées.
# Fonction pour vérifier si l'input est un nombre
def get_float_input(prompt):
while True:
user_input = input(prompt)
if user_input == "": # L'utilisateur a appuyé sur "Annuler" ou n'a rien entré
print("Annulation de l'opération.")
return None
try:
value = float(user_input)
return value
except ValueError:
if user_input.isalpha():
print("Erreur : Vous avez entré des lettres. Veuillez entrer un nombre.")
else:
print("Erreur : Entrée invalide. Veuillez entrer un nombre.")
# Saisie des quantités initiales avec vérification
nI2_0 = get_float_input('Quantité initiale en diiode en mol : ')
if nI2_0 is None:
exit() # Arrête le programme si l'utilisateur a annulé l'entrée
nS2O3_0 = get_float_input('Quantité initiale en thiosulfate en mol : ')
if nS2O3_0 is None:
exit() # Arrête le programme si l'utilisateur a annulé l'entrée
# Initialisation
limitant = "" # initialisation de la chaîne de caractère correspondant au réactif limitant
x = 0 # avancement initial
a = 0.001 # pas d'avancement
qI2 = [nI2_0]
qS2O3 = [nS2O3_0]
# Boucle pour le calcul des quantités restantes
while qI2[-1] > 0 and qS2O3[-1] > 0:
x += a
qI2.append(nI2_0 - x)
qS2O3.append(nS2O3_0 - 2 * x)
# Identification du réactif limitant
if qI2[-1] <= 0:
limitant = "I2"
elif qS2O3[-1] <= 0:
limitant = "S2O3"
# Affichage des résultats
print(f"Le réactif limitant est : {limitant}")
print(f"Avancement final : {round(x, 3)} mol")
print(f"Quantité restante de I2 : {round(qI2[-1], 3)} mol")
print(f"Quantité restante de S2O3 : {round(qS2O3[-1], 3)} mol")
- Quand la transformation a été conduite à son terme, le(s) réactif(s) limitant(s) est identifié grâce à la commande
liste[-1]
qui permet d’appeler la dernière valeur dans une liste. L’avancement final est choisi comme la dernière valeur d’avancement calculée. Enfin, la commandeprint
permet d’afficher l’état final.round
permet d’afficher un arrondi à 2 chiffres significatifs.
Dans les conditions initiales choisies, le script renvoie :
Le réactif limitant est : S2O3
Avancement final : 1.501 mol
Quantité restante de I2 : 0.499 mol
Quantité restante de S2O3 : -0.002 mol
- Il est possible de tester différentes situations initiales avec les élèves pour mettre l’accent sur l’importance des nombres stœchiométriques dans l’identification du réactif limitant (le réactif limitant n’est pas nécessairement celui introduit en plus petite quantité).
Généralisation : Gestion de Coefficients Stœchiométriques Divers¶
On peut généraliser ce script pour traiter n'importe quelle réaction chimique de la forme :
kA A + kB B = kC C + kD D
En modifiant simplement les coefficients stœchiométriques et les quantités initiales, le script peut calculer directement le réactif limitant et l’avancement maximal, quel que soit le système étudié.
Cette approche permet de montrer que le réactif limitant n’est pas toujours celui en plus petite quantité initiale, soulignant l’importance des coefficients stœchiométriques dans la réaction chimique.