J_Bernon

graphique avancement avancé

Oct 21st, 2019
121
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # -*- coding: utf-8 -*-
  2. """
  3. Tracé du graphique quantités de matière en fonction de l'avancement
  4. version 04 : Le programme prend en charge un nombre arbitraire de composés
  5. -- Pour les élèves suivant Spé NSI ou les curieux --
  6.  
  7. @author: Julien Bernon, Lycée Louis Feuillade
  8. """
  9.  
  10. from matplotlib import pyplot as plt #On importe d'abord ce qui permet de tracer des graphiques
  11.  
  12. #la seule fonction qui va se charger de dénombrer les quantités de matière
  13. def f(x,k,n):
  14.     return n-k*x
  15.  
  16. #détermination de l'avancement maximal
  17. def av_max(coeff_sto,quantites_ini,nb_reactifs):
  18.     #on crée une liste des avancements max pour chaque réactif
  19.     xmax_inter=[quantites_ini[i]/coeff_sto[i] for i in range(nb_reactifs)]
  20.     #on retourne le minimum de cette liste
  21.     return min(xmax_inter)
  22.  
  23. #tracé du graphique, coeff_sto et quantites_ini sont des listes
  24. def generation(coeff_sto,quantites_ini,nb_reactifs,xmax,nb_pts,symboles):
  25.     liste_x=[]
  26.     liste_y=[]
  27.    
  28.     #on commence par créer une liste contenant autant de sous-listes que de substances
  29.     for j in range(len(coeff_sto)):
  30.         liste_y.append([])
  31.        
  32.     #on peuple maintenant les listes    
  33.     for i in range(nb_pts):
  34.         #la liste des abscisses
  35.         x=0+i*(xmax-0)/nb_pts
  36.         liste_x.append(x)
  37.  
  38.         #on calcule maintenant les quantités de matières des substances
  39.         for j in range(len(coeff_sto)):
  40.            
  41.             if (j<nb_reactifs):
  42.                 #si j est plus petit que le nombre de réactifs, alors on a un réactif
  43.                 liste_y[j].append(f(x,coeff_sto[j],quantites_ini[j]))
  44.             else:
  45.                 #si j est supérieur ou égal au nombre de réactifs, alors on a un produit
  46.                 #on pense donc à mettre un - devant le coefficient stoechiométrique
  47.                 liste_y[j].append(f(x,-coeff_sto[j],quantites_ini[j]))
  48.        
  49.     #On place les points de toutes les substances
  50.     for j in range(len(coeff_sto)):
  51.        plt.plot(liste_x,liste_y[j])
  52.    
  53.     #On ajoute une légende au graphique en créant une liste de lettres
  54.     #correspondant aux substances A, B, ...
  55.     plt.legend([symboles[i] for i in range(len(coeff_sto))])
  56.    
  57.     plt.show()
  58.     return True
  59.  
  60. def informations():
  61.     #on définit le nombre de réactifs et de produits
  62.     nb_reactifs=int(input("Nombre de réactifs : "))
  63.     nb_produits=int(input("Nombre de produits : "))
  64.    
  65.     #on va enregistrer les réactifs et les produits dans des listes
  66.     symboles=[]
  67.     coeff_sto=[]
  68.     quantites_ini=[]
  69.     print("====================================")
  70.     print("Définition des réactifs")
  71.     print("====================================")
  72.     for i in range(nb_reactifs+nb_produits):
  73.         if (i==nb_reactifs):
  74.             print("====================================")
  75.             print("Définition des produits")
  76.             print("====================================")
  77.         symboles.append(input("Symbole de la substance n°"+str(i+1)+" : "))    
  78.         coeff_sto.append(float(input("Coefficient stoechiométrique de "+symboles[i]+" : ")))
  79.         quantites_ini.append(float(input("Quantité initiale de "+symboles[i]+" : ")))
  80.     return coeff_sto,quantites_ini,nb_reactifs,symboles
  81.  
  82. coeff_sto,quantites_ini,nb_reactifs,symboles=informations()
  83. xmax=av_max(coeff_sto,quantites_ini,nb_reactifs)
  84. generation(coeff_sto,quantites_ini,nb_reactifs,xmax,100,symboles)
RAW Paste Data