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