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