Adloun

Pour aller plus loin. Écrire une fonction Python bilan(n0, coeffs r…

Exercice supplémentaire · niveau 3 (difficile) · chimie (première), chapitre 4 — Avancement et bilans de matière · Le tableau d'avancement comme outil général

Énoncé

Pour aller plus loin. Écrire une fonction Python bilan(n0, coeffs_r, coeffs_p, x) qui renvoie les quantités de tous les réactifs et produits à l'avancement , et qui lève une erreur si dépasse ou si . La tester sur la synthèse de l'ammoniac.

Corrigé


def bilan(n0, coeffs_r, coeffs_p, x):
    x_max = min(n0[i] / coeffs_r[i] for i in range(len(n0)))
    if x < 0 or x > x_max:
        raise ValueError(f"x doit rester dans [0 ; {x_max}]")
    reactifs = [n0[i] - coeffs_r[i] * x for i in range(len(n0))]
    produits = [c * x for c in coeffs_p]
    return reactifs, produits

print(bilan([2.0, 4.5], [1, 3], [2], 1.0))   # ([1.0, 1.5], [2.0])
print(bilan([2.0, 4.5], [1, 3], [2], 1.5))   # ([0.5, 0.0], [3.0])
# bilan([2.0, 4.5], [1, 3], [2], 2.0)        # ValueError

Le raise n'est pas un ornement : sans lui, un avancement trop grand renverrait des quantités négatives, résultat mathématiquement correct et chimiquement absurde. Un programme de chimie doit refuser les états impossibles, pas les calculer.

Contrôle : à , on retrouve exactement l'état final du cours — mol de , de , mol de .

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.