"""
Ce programme simule le titrage d'un réactif A par un réactif B selon la réaction d'équation :
                aA + bB -> cC + dD
Les concentrations des réactifs titrant et titré sont cA et cB,
le volume du prélèvement de A est VA = 20 mL, le volume de B versé est VB variant de 0 à 25 mL.
"""
import matplotlib.pyplot as plt
# nombres stoechiométriques
a = 1
b = 1
c = 1
d = 1
# Concentrations initiales en mol/L:
cA = 0.1
cB = 0.15
# Volumes initiaux dans le bécher :
VA = 20
VBi = 0
# QDM initiales dans le bécher :
""" TRAVAIL 1
Taper ci-dessous, le code python permettant
de calculer la quantité initiale de réactif titré
"""
nAi =""" """
nBi = 0
nCi = 0
nDi = 0
# Listes des grandeurs à tracer :
VB = []
nA = []
nB = []
nC = []
nD = []
x  = []

i=0
X=0
VB.append (VBi)     #VBi est le premier terme de la liste des valeurs de VB
x.append (X)        #X=0 est la première valeur de la liste des x
nA.append (nAi)
nB.append (nBi)
nC.append (nCi)
nD.append (nDi)

""" TRAVAIL 2
Compléter ci-dessous la condition pour laquelle on cesse de faire augmenter le volume V
"""
while (nA[i]>=""" """):
    V=VB[i]+0.5     #on ajoute 0.5 à la dernère valeur de la liste des volumes versés
    VB.append (V)   #on ajoute cette valeur à la liste des volumes versés
    """ TRAVAIL 3
    Taper ci-dessous le code python permettant
    de calculer l'avancement pour une quantité initiale de réactif titré
    """
    X = """ """
    x.append (X) # on ajoute la nouvelle valeur de l'avancement à la liste
    """ TRAVAIL 4
    Taper ci-dessous les codes python permettant de calculer les quantités
    """
    nA.append (""" """)
    nB.append (0)
    nC.append (""" """)
    nD.append (""" """)
    i=i+1
# ici on sort de la boucle while dès que la condition n'est plus vérifiée
xmax=x[i]
nCmax=nC[i]
nDmax=nD[i]

while (V < 25):
    V=VB[i]+0.5
    VB.append (V)
    nB.append (cB*V-b*nAi/a)
    """ TRAVAIL 5
    Taper ci-dessous les codes python permettant de calculer les quantités
    """
    nA.append (""" """)
    nC.append (""" """)
    nD.append (""" """)
    i=i+1

plt.subplots(figsize=(10,7))
Reaction = 'Equation de la réaction : '
Reaction = Reaction + str(a)+'A + '+str(b)+'B → '+str(c)+' C + '+str(d) + ' D'
plt.title (Reaction)
plt.plot(VB, nA, '-o', label='n(A) en mol',linewidth=1, color = 'salmon')
plt.plot(VB, nB, '-+', label='n(B) en mol',linewidth=1, color = 'darkorange')
plt.plot(VB, nC, '-o', label='n(C) en mol',linewidth=1, color = 'royalblue')
plt.plot(VB, nD, '-+', label='n(D) en mol',linewidth=1, color='g')
plt.xlabel ('VB (en mL)')
plt.ylabel ('Quantités de matière (en mol)')
plt.legend()
plt.grid()
plt.show()


