【发布时间】:2019-04-01 05:01:26
【问题描述】:
我有这本字典,其中键代表原子类型,值代表原子质量:
mass = {'H': 1.007825, 'C': 12.01, 'O': 15.9994, 'N': 14.0067, 'S': 31.972071,
'P': 30.973762}
我想做的是创建一个给定分子的函数,例如('H2-N-C6-H4-C-O-2H'),迭代mass 字典并计算给定分子的原子质量。质量值必须乘以原子类型后面的数字:H2 = H.value * 2
我知道首先我必须隔离给定分子的键,为此我可以使用string.split('-')。然后,如果给定分子的键在字典中,我想我可以使用和if 块来确定要完成的条件。但后来我迷失了我应该如何继续找到字典每个键的质量。
预期的结果应该是这样的:
mass_counter('H2-N15-P3')
out[0] 39351.14
我该怎么做?
编辑:
这是我迄今为止尝试过的
# Atomic masses
mass = {'H': 1.007825, 'C': 12.01, 'O': 15.9994, 'N': 14.0067, 'S': 31.972071,
'P': 30.973762}
def calculate_atomic_mass(molecule):
"""
Calculate the atomic mass of a given molecule
"""
mass = 0.0
mol = molecule.split('-')
for key in mass:
if key in mol:
atom = key
return mass
print calculate_atomic_mass('H2-O')
print calculate_atomic_mass('H2-S-O4')
print calculate_atomic_mass('C2-H5-O-H')
print calculate_atomic_mass('H2-N-C6-H4-C-O-2H')
【问题讨论】:
-
你能展示你已经尝试过的吗?
-
对了
H的前面的2在做什么? -
'H2-N15-P3':
1*2 + 14*15 + 31*3 = 305 -
你为什么要倍增群众?
-
与其检查“分子”中的每个可能元素,然后必须弄清楚有多少这样的原子,并担心会出现多次出现,不如反过来做:除以@ 987654332@,获取元素和数字,通过简单地索引字典以元素为键
masses[element]来获取质量。
标签: python python-2.7 loops dictionary