Exercice 2

On se propose d'écrire un script python qui permet de calculer la masse moléculaire (en g/mol) d'une molécule dont on fournit la formule brute.

Le script principal est le suivant, il fait appel à une classe Molecule que vous allez écrire 😃.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python

import Molecule

# version 1
ethanol = Molecule.MoleculeV1()
ethanol.setAtome('C',2)
ethanol.setAtome('H',6)
ethanol.setAtome('O',1)

print "la masse de l'ethanol vaut %f" % (ethanol.getMass())
print "formule brute de l'ethanol: C(%d) H(%d) O(%d)" % (ethanol.getAtome('C'),ethanol.getAtome('H'), ethanol.getAtome('O'))

# version 2
ethanol = Molecule.MoleculeV2()
ethanol['C'] = 2
ethanol['H'] = 6
ethanol['O'] = 1
print "la masse de l'ethanol vaut %f" % (ethanol.mass)
print "formule brute de l'ethanol: C(%d) H(%d) O(%d)" % (ethanol['C'],ethanol['H'], ethanol['O'])

# la ligne suivante doit generer une erreur:
#ethanol.mass = 100.0

Ce script donne à l'exécution le résultat suivant:

la masse de l'ethanol vaut 46.000000
formule brute de l'ethanol: C(2) H(6) O(1)
la masse de l'ethanol vaut 46.000000
formule brute de l'ethanol: C(2) H(6) O(1)

Astuce...

#!/usr/bin/env python

"""Comment utiliser une classe comme un dictionnaire..."""

class MaClasse(object):
  def __init__(self):
    # on cree un dictionnaire prive dans le constructeur
    self.__mondict = {}

  def __getitem__(self, key):  # on utilise la methode __getitem__
                               # pour renvoyer un item a partir d'une cle (key)
    return self.__mondict[key]

  def __setitem__(self, key, value): # on utilise la methode __setitem__
                                     # pour modifier la valeur d'une cle
    self.__mondict[key] = value

# exemple d'utilisation:
obj = MaClasse()
obj[1] = 23
obj['toto'] = 3.14
obj[True] = False

print obj[1]
print obj['toto']
print obj[True]