Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- """
- Tracé du graphique quantités de matière en fonction de l'avancement
- version 04 : Le programme prend en charge un nombre arbitraire de composés
- -- Pour les élèves suivant Spé NSI ou les curieux --
- @author: Julien Bernon, Lycée Louis Feuillade
- """
- from matplotlib import pyplot as plt #On importe d'abord ce qui permet de tracer des graphiques
- #la seule fonction qui va se charger de dénombrer les quantités de matière
- def f(x,k,n):
- return n-k*x
- #détermination de l'avancement maximal
- def av_max(coeff_sto,quantites_ini,nb_reactifs):
- #on crée une liste des avancements max pour chaque réactif
- xmax_inter=[quantites_ini[i]/coeff_sto[i] for i in range(nb_reactifs)]
- #on retourne le minimum de cette liste
- return min(xmax_inter)
- #tracé du graphique, coeff_sto et quantites_ini sont des listes
- def generation(coeff_sto,quantites_ini,nb_reactifs,xmax,nb_pts,symboles):
- liste_x=[]
- liste_y=[]
- #on commence par créer une liste contenant autant de sous-listes que de substances
- for j in range(len(coeff_sto)):
- liste_y.append([])
- #on peuple maintenant les listes
- for i in range(nb_pts):
- #la liste des abscisses
- x=0+i*(xmax-0)/nb_pts
- liste_x.append(x)
- #on calcule maintenant les quantités de matières des substances
- for j in range(len(coeff_sto)):
- if (j<nb_reactifs):
- #si j est plus petit que le nombre de réactifs, alors on a un réactif
- liste_y[j].append(f(x,coeff_sto[j],quantites_ini[j]))
- else:
- #si j est supérieur ou égal au nombre de réactifs, alors on a un produit
- #on pense donc à mettre un - devant le coefficient stoechiométrique
- liste_y[j].append(f(x,-coeff_sto[j],quantites_ini[j]))
- #On place les points de toutes les substances
- for j in range(len(coeff_sto)):
- plt.plot(liste_x,liste_y[j])
- #On ajoute une légende au graphique en créant une liste de lettres
- #correspondant aux substances A, B, ...
- plt.legend([symboles[i] for i in range(len(coeff_sto))])
- plt.show()
- return True
- def informations():
- #on définit le nombre de réactifs et de produits
- nb_reactifs=int(input("Nombre de réactifs : "))
- nb_produits=int(input("Nombre de produits : "))
- #on va enregistrer les réactifs et les produits dans des listes
- symboles=[]
- coeff_sto=[]
- quantites_ini=[]
- print("====================================")
- print("Définition des réactifs")
- print("====================================")
- for i in range(nb_reactifs+nb_produits):
- if (i==nb_reactifs):
- print("====================================")
- print("Définition des produits")
- print("====================================")
- symboles.append(input("Symbole de la substance n°"+str(i+1)+" : "))
- coeff_sto.append(float(input("Coefficient stoechiométrique de "+symboles[i]+" : ")))
- quantites_ini.append(float(input("Quantité initiale de "+symboles[i]+" : ")))
- return coeff_sto,quantites_ini,nb_reactifs,symboles
- coeff_sto,quantites_ini,nb_reactifs,symboles=informations()
- xmax=av_max(coeff_sto,quantites_ini,nb_reactifs)
- generation(coeff_sto,quantites_ini,nb_reactifs,xmax,100,symboles)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement