teaching:progappchim:solvents_data_class

no way to compare when less than two revisions

Différences

Ci-dessous, les différences entre deux révisions de la page.


teaching:progappchim:solvents_data_class [2012/11/30 13:39] (Version actuelle) – créée villersd
Ligne 1: Ligne 1:
 +====== Utilisation d'une "classe" pour des données de solvants chimiques ======
 +
 +On peut utiliser la structure de classe pour créer une "table" de données sur des solvants. Il est alors possible d'effectuer des traitements de tris, sélection, impression...
 +
 +<sxh  python; title : organic_solvents_data_class.py>
 +#!/usr/bin/env python 
 +# -*- coding: utf-8 -*-
 +
 +# a solvent database using a list of class instances
 +# a modification of: http://www.daniweb.com/code/snippet390.html
 +# EU tested with Python 2.4   10/30/2006
 +#
 +# modification UMONS - cours programmation python - 2007-2012
 +#
 + 
 +import operator  # for attrgetter()
 + 
 +class Solvent(object):
 +    """a structure class for solvents, self refers to the instance"""
 +    def __init__(self, name=9999, bp=9999, mp=9999, fp=9999, dy=9999, de=9999, nr=9999, mu=9999, so=9999, fo=9999):
 +        self.name = name
 +        # 9999 --> not applicable
 +        self.bp = bp     # boiling point degC
 +        self.mp = mp     # melting point degC
 +        self.fp = fp     # flash point degC
 +        self.dy = dy     # density g/ml
 +        self.de = de     # dielectric constant
 +        self.nr = nr     # refractive index
 +        self.mu = mu     # dipole moment in Debye
 +        self.so = so     # solubility in water (g/100g water) --> 9000 = miscible
 +        self.fo = fo     # chemical formula
 +
 +def table(solvent_list):
 +    """print a table of all solvent attributes"""
 +    title_str = "%-20s  %8s  %8s  %8s  %8s  %8s  %8s  %8s  %8s  %20s"
 +    data_str  = "%-20s  %8.1f  %8.1f  %8.1f  %8.3f  %8.2f  %8.2f  %8.2f  %8.2f  %-20s"
 +    print "-"*122
 +    print title_str % ("Name", "Bp", "Mp", "Fp", "Density", "Dielect", "Ref. Ind", "Dipole", "H2O Sol.", "Formula")
 +    for solvent in solvent_list:
 +        print data_str % (solvent.name, solvent.bp, solvent.mp, solvent.fp, solvent.dy, solvent.de, solvent.nr, solvent.mu, solvent.so, solvent.fo)
 +    print "-"*122
 +    print "9999 --> not applicable; 9000 --> miscible"
 +    print
 + 
 +def table_bp(solvent_list, bp_limit):
 +    """print a table of all solvent attributes, with bp restrictions"""
 +    title_str = "%-20s  %8s  %8s  %8s  %8s  %8s"
 +    data_str  = "%-20s  %8.1f  %8.1f  %8.1f  %8.3f    %8.2f"
 +    print "-"*72
 +    print title_str % ("Name", "Bp", "Mp", "Fp", "Density", "Dielectric")
 +    for solvent in solvent_list:
 +        if solvent.bp > bp_limit:
 +            print data_str % (solvent.name, solvent.bp, solvent.mp, solvent.fp, solvent.dy, solvent.de)
 +    print "-"*72
 +    print "9999 --> not applicable; 9000 --> miscible"
 +    print
 +    
 +# make a list of class Solvent instances
 +# also adds all the data/information
 +# data order = name, boiling point, melting point, flash point, density, dielectric constant,
 +# refractive index, dipole moment in Debye, solubility in water (g/100g water), chemical formula
 +# 9999 --> not applicable; 9000 --> miscible
 +solvent_list = []
 +solvent_list.append(Solvent("methanol", 64.7, -97.7, 11, 0.791, 32.7, 1.3284, 1.7, 9900, "CH4O"))
 +solvent_list.append(Solvent("ethanol", 78.3, -114.1, 8, 0.789, 24.55, 1.3614, 1.69, 9900, "C2H6O"))
 +solvent_list.append(Solvent("propanol iso", 82.3, -88, 22, 0.785, 19.92, 1.3772, 1.66, 9900, "C3H8O"))
 +solvent_list.append(Solvent("butanol normal", 117.7, -88.6, 35, 0.81, 17.51, 9999, 9999, 7.7, "C4H10O"))
 +solvent_list.append(Solvent("butanol secondary", 88.8, -114.7, 26, 0.805, 16.56, 9999, 9999, 9999, "C4H10O"))
 +solvent_list.append(Solvent("butanol tertiary", 82.2, 25.5, 4, 0.786, 10.9, 1.3877, 1.66, 9900, "C4H10O"))
 +#solvent_list.append(Solvent("benzyl alcohol", 205.4, -15.3, 100, 1.045, 13.1, 9999, 9999, 9999, "unknown"))
 +solvent_list.append(Solvent("acetone", 56.3, -94.7, -17, 0.791, 20.7, 1.3587, 2.85, 9900, "C3H6O"))
 +solvent_list.append(Solvent("toluene", 110.6, -94.9, 4, 0.867, 2.38, 1.4969, 0.43, 0.05, "C7H8"))
 +solvent_list.append(Solvent("water", 100, 0, 9999, 1, 78.5, 1.333, 1.82, 9900, "H2O"))
 +solvent_list.append(Solvent("dimethyl formamide", 153, -61, 58, 0.944, 36.7, 1.4305, 3.86, 9900, "C3H7NO"))
 +solvent_list.append(Solvent("acetic acid", 118, 17, 39, 1.049, 6.15, 1.3716, 1.68, 9900, "C2H4O2"))
 +# got the drift, add more solvents here ...
 + 
 + 
 +print "Sort the solvent_list by name ..."
 +solvent_list.sort(key=operator.attrgetter('name'))
 +# ... now show a table of the solvent_list
 +table(solvent_list)
 + 
 +print
 + 
 +print "Sort the solvent_list by melting point ..."
 +solvent_list.sort(key=operator.attrgetter('mp'))
 +# ... now show a table of the solvent_list
 +table(solvent_list)
 + 
 +print
 + 
 +print "Sort the solvent_list by boiling point ..."
 +solvent_list.sort(key=operator.attrgetter('bp'))
 +# ... now show a table of the solvent_list
 +table(solvent_list)
 + 
 +print
 +
 +# ajouter suivant d'autres tris (solubilité ,...)
 + 
 +bp_limit = 75
 +print "Show only solvents boiling higher than %0.1f degC:" % bp_limit
 +# show a boiling point restricted table
 +table_bp(solvent_list, bp_limit)
 +
 +# on peut chercher un solvant de densité supérieure à l'eau, mais
 +# peu soluble ou insoluble (solubilité < 0.05 par exemple)
 +
 +
 +</sxh>
  
  • teaching/progappchim/solvents_data_class.txt
  • Dernière modification : 2012/11/30 13:39
  • de villersd