使用python根据化学式计算分子量

使用python根据化学式计算分子量,python,Python,我正在使用python 2.7 例如,我的公式是C6H12O6。我在下面使用了这个代码 formula='C6H12O6' s = re.findall('([A-Z][a-z]?)([0-9]*)', formula) 得到了这个结果: s= [('C', '6'), ('H', '12'), ('O', '6')] 从这里开始,我试图找出如何做到这一点: ( C x 6 )+( H x 12 )+( O x 6 ) 谁能帮帮我吗,我已经被困在这里差不多一天了。 我也很欣赏任何其他想法

我正在使用python 2.7

例如,我的公式是
C6H12O6
。我在下面使用了这个代码

formula='C6H12O6'

s = re.findall('([A-Z][a-z]?)([0-9]*)', formula)
得到了这个结果:

s= [('C', '6'), ('H', '12'), ('O', '6')]
从这里开始,我试图找出如何做到这一点:

( C x 6 )+( H x 12 )+( O x 6 )
谁能帮帮我吗,我已经被困在这里差不多一天了。
我也很欣赏任何其他想法。

您可以创建一个权重字典,将元素的字符映射到它们各自的原子量,并使用
sum()
函数对您拥有的列表值进行求和

weights = {'C': 12, 'H': 1, 'O': 16}
s = [('C', '6'), ('H', '12'), ('O', '6')]

total = sum((weights[e] * int(i)) for e, i in s) # 180

这应该行得通,只需为整个元素权重获取一个更完整的字典(元素周期表)

import re

formula='CH12O6' #example molecule with singular element 

s = re.findall('([A-Z][a-z]?)([0-9]*)', formula)

elem_weight = {'C': 12, 'H': 1, 'O': 16}

total_weight = 0
for elem, count in s:

    #For singular elements
    if count=='':
        count = 1

    total_weight += int(count)*elem_weight[elem]

print total_weight

字母代表某种数值吗?是的,字母是元素。所以C是12,H是1,O是16,我已经为此制作了一个字典,比如total=sum([w[elem[0]]*elem[1]代表s中的元素)?其中w是原子质量的字典。请注意,解决方案应处理元素名称后面没有数字的情况,如“H2O”。目前没有一种解决方案能做到这一点。啊,这是一种更好的方法!谢谢你很容易理解!!