Leer Cadenas
Jordi Funollet
jordi.f en ati.es
Jue Mayo 11 14:40:44 CEST 2006
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
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es
Más información sobre la lista de distribución Python-es