使用python计算基于化学式的分子量

时间:2017-01-24 02:13:28

标签: python

我正在使用python 2.7。

例如,我的公式为for (int i = 0; i < 10; i++) { LocalDateTime time = LocalDateTime.of(LocalDate.now(), LocalTime.of(random.nextInt(24), random.nextInt(60), random.nextInt(60), random.nextInt(999999999 + 1))); System.out.println(time); } 。我使用下面的代码

C6H12O6

得到了这个结果:

formula='C6H12O6'

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

从这里开始,我试图找出如何做到这一点:

s= [('C', '6'), ('H', '12'), ('O', '6')]

请有人帮忙,我已经被困在这里将近一天了。 我也很欣赏其他任何想法。

2 个答案:

答案 0 :(得分:1)

您可以创建一个权重字典,将元素的字符映射到各自的原子权重,并使用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

答案 1 :(得分:0)

这应该有用,只需为整个elem_weight

获取更完整的字典(周期表)
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