Şurada yazmıştım, buraya da kopyalayayım dedim. Yoksa yaptığım
şeylerin takibini yapmak zor oluyor. 
|  | # -*- coding: utf-8 -*-
 | 
|  | def kimyaparser(formul):
 | 
|  |     harfler = []
 | 
|  |     sayilar = []
 | 
|  |     state = 0
 | 
|  |     sonuc = {}
 | 
|  |     formul = formul.upper()
 | 
|  | 
 | 
|  |     for karakter in formul:
 | 
|  |         try:
 | 
|  |             karakter = int(karakter)
 | 
|  |             #karakter bir sayı
 | 
|  |             sayilar.append(karakter)
 | 
|  |             state = 1 # en son bir sayı ekledik.
 | 
|  | 
 | 
|  |         except ValueError:
 | 
|  |             #karakter bir harf
 | 
|  |             if state == 1:
 | 
|  |                 # en son bir sayı eklenmiş
 | 
|  |                 # demek ki yeni bir atoma geçiliyor.
 | 
|  |                 anahtar = "".join(harfler)
 | 
|  |                 if len(sayilar) > 0:
 | 
|  |                     deger = int("".join([str(i) for i in sayilar]))
 | 
|  |                 else:
 | 
|  |                     deger = 1
 | 
|  |                 if anahtar in sonuc:
 | 
|  |                     # eğer daha önce bu atom eklendiyse, sayıyı artır
 | 
|  |                     sonuc[anahtar] += deger
 | 
|  |                 else:
 | 
|  |                     sonuc[anahtar] = deger
 | 
|  |                 harfler = [karakter]
 | 
|  |                 sayilar = []
 | 
|  |             else:
 | 
|  |                 harfler.append(karakter)
 | 
|  |             state = 0
 | 
|  |     # en son kalanları da ekle:
 | 
|  |     anahtar = "".join(harfler)
 | 
|  |     if sayilar:
 | 
|  |         deger = int("".join([str(i) for i in sayilar]))
 | 
|  |     else:
 | 
|  |         deger = 1
 | 
|  |     if anahtar in sonuc:
 | 
|  |         sonuc[anahtar] += deger
 | 
|  |     else:
 | 
|  |         sonuc[anahtar] = deger
 | 
|  |     return sonuc
 | 
Kullanımından örnek:
|  | >>> kimyaparser("H2SO4")
 | 
|  | {'H': 2, 'SO': 4}
 | 
|  | >>> kimyaparser("C78H127N16S8O8")
 | 
|  | {'H': 127, 'C': 78, 'S': 8, 'O': 8, 'N': 16}
 | 
|  | >>> kimyaparser("C44189H71252N12428O14007S321")
 | 
|  | {'H': 71252, 'C': 44189, 'S': 321, 'O': 14007, 'N': 12428}
 |