Leer Cadenas

Arnau Sanchez arnau en ehas.org
Jue Mayo 11 15:37:02 CEST 2006


Jordi Funollet wrote:

 > Ca2CO3 48
 > ¿48? ¿Eso es muy poco, no?

y tanto, parece que sólo te está haciendo el O * 3 = 16 * 3 = 48

 >>> 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 140

No estarás con alguna alpha de python? ;-)

arnau

Jordi Funollet 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]]
>
>
>  
>
>------------------------------------------------------------------------
>
>_______________________________________________
>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