Leer Cadenas

Hernan M Foffani hfoffani en gmail.com
Jue Mayo 11 09:51:58 CEST 2006


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

Bonito y sencillo.
-Hernán

On 5/10/06, Tny <a.porrua en gmail.com> wrote:
> Me gustaría ver cómo se haría con expresiones regulares.
> Yo programo a lo bestía y soy consciente de que hay un montón de cosas
> que facilitan el trabajo y que desconozco completamente,
> si alguno se anima y envía el código para hacer esto de las moléculas
> mediante expresiones regulares, veo si realmente supone una ventaja y me
> animo a mirarlo.
> gracias
>
>
> Hernan M Foffani escribió:
> > On 5/10/06, NeCuDeCo <necudeco en gmail.com> wrote:
> >> Obviamente, necesitarias un diccionario para tener los pesos de cada
> >> atomo y
> >> otras cosas mas
> >> Pero para poder determinar q atomos existen y en que proporciones
> >> dentro de
> >> una molecula yo usaria Exp Regualres, ...
> >
> > Asi es.  Esa fue me metida de pata.  En no recordar (¡glup!) que
> > el simbolo de un atomo es una letra mayuscula o una mayuscula y
> > una minuscula. ¡Simple!
> >
> > -Hernán
> >
> >> ..., luego con esa info me voy al
> >> diccionario y saco los pesos y nada mas m,ultiplico :P
> >>
> >>
> >> On 5/10/06, Tny <a.porrua en gmail.com> wrote:
> >> >
> >> > Hola Jean, supongo que lo primero es leer la cadena, no he visto que
> >> > los otros correos hiciesen eso, (o no lo entendí),
> >> > puedes transformar la cadena en una lista de tuplas
> >> > Ca2CO3 ==> [(Ca,2),(C,1),(O,3)]
> >> > Yo lo haría así, igual te inspira para que lo hagas a tu modo ;-)
> >> >
> >> > def procesar(cad):
> >> >     "Transforma cad a lista de tuplas"
> >> >     r=[]
> >> >     z=len(cad)
> >> >     i=0
> >> >     while i<z:
> >> >     j=i+1
> >> >     while j<z and cad[j].islower():
> >> >         j=j+1
> >> >     k=j
> >> >     while k<z and not cad[k].isalpha():
> >> >             k=k+1
> >> >         if k<>j:
> >> >             r.append((cad[i:j],int(cad[j:k])))
> >> >         else:
> >> >             r.append((cad[i:j],1))
> >> >         i=k
> >> >     return r
> >> >
> >> > La segunda parte (cotejar la lista con el diccionario) te lo dejo a
> >> tí,
> >> > si no te aclaras vuelve a preguntar.
> >> >
> >> >
> >> > Jean Carlos Rodrìguez escribió:
> >> > > Hola lista, tengo una duda sobre como puedo leer una
> >> > > cadena, bueno les comento un poco es para sacar el
> >> > > peso molecular de un compuesto ejemplo la cadena puede
> >> > > ser:
> >> > > Ca2CO3
> >> > > Debo separar Mayusculas con minusculas, numeros y solo
> >> > > Mayusculas para poder buscar los atomos en un
> >> > > diccionario
> >> > >
> >> > > atomos = {C:12,H:1,Ca:40,O:16}
> >> > > Pero no se como vincular para solo obtener lo que
> >> > > tengo en el diccionario, no se si es algo trivial,
> >> > > pero llevo varios dias dandale vueltas a esto, si
> >> > > alguien sabe algo o como se lo agradeceria.
> >> > > He visto el modulo string,
> >> > > Gracias
> >> > > Jean Carlos
> >> > >
> >> >
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
------------ 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