У меня есть этот словарь, где ключи представляют атомные типы, а значения представляют атомные массы:
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
block для определения условия, которое необходимо выполнить, если ключ данной молекулы находится в словаре. Но позже я забыл о том, как мне найти массу для каждого ключа словаря.
Ожидаемый результат должен быть примерно таким:
mass_counter('H2-N15-P3')
out[0] 39351.14
Как я мог это сделать?
EDIT:
Это то, что я пробовал до сих пор
# 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')