Leer Cadenas
NeCuDeCo
necudeco en gmail.com
Jue Mayo 11 14:47:53 CEST 2006
de q podria, si se podria.
Pero con las exp regulares, la solucion se vuelve mas elegante y sencilla.
Saludos
On 5/11/06, Jordi Funollet <jordi.f en ati.es> wrote:
>
> Hernan M Foffani dixit:
> > Es como lo había propuesto Arnau en un mail anterior:
> >
> > import re
> > cadena = "Ca2CO3"
> > atomos = {"C":12,"H":1,"Ca":40,"O":16}
> > componentes = re.findall("([A-Z][a-z]*)(\d*)", cadena)
> > peso = 0
> > for elemento, numero in componentes:
> > try: numero = int(numero)
> > except: numero = 1
> > peso += atomos[elemento] * numero
> > print cadena, peso
>
> Ca2CO3 48
>
>
> ¿48? ¿Eso es muy poco, no? ;-)
>
> El parseado se podria hacer sin expresiones regulares.
>
>
> class Atomizado:
> def __init__(self, molecula):
> self.atomizado = []
> [self.__coloca(c) for c in molecula]
>
> def __coloca (self, c):
> if c.isupper():
> if len(self.atomizado) and self.atomizado
> [-1][1]==0:
> self.atomizado[-1][1] = 1
> self.atomizado.append ([c, 0])
> elif c.islower():
> self.atomizado[-1][0] += c
> elif c.isdigit():
> self.atomizado[-1][1] = 10*self.atomizado[-1][1]
> + int(c)
>
>
> m = Atomizado('Ca8H10NO2')
> print m.atomizado
>
> [['Ca', 8], ['H', 10], ['N', 1], ['O', 2]]
>
>
> --
> ##############################
> ### Jordi Funollet
> ### http://www.terraquis.net
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
>
>
--
--------------------------
NeCuDeCo
http://necudeco.blogsome.com
Your Jugdment Day is NOW
Más información sobre la lista de distribución Python-es