python计算相对分子质量_如何在python中得到化合物的分子量?

整个暑假我都在上12年级的化学课,我也想过要这样做。我想了一个不同的方法来做,这里是版本1(“0”只是一个占位符,我只是没有用“”)我检查了C12H2COOH,它给出了正确的答案(191.16g/mol)。希望这能帮助一些人:__author__ = 'Elijah Lopez'

__version__ = 1.0

__created__ = '2017-08-07'

'''

Molar Mass Calculator - by Elijah Lopez

Version 1.0

Python 3.6

'''

MM_of_Elements = {'H': 1.00794, 'He': 4.002602, 'Li': 6.941, 'Be': 9.012182, 'B': 10.811, 'C': 12.0107, 'N': 14.0067,

'O': 15.9994, 'F': 18.9984032, 'Ne': 20.1797, 'Na': 22.98976928, 'Mg': 24.305, 'Al': 26.9815386,

'Si': 28.0855, 'P': 30.973762, 'S': 32.065, 'Cl': 35.453, 'Ar': 39.948, 'K': 39.0983, 'Ca': 40.078,

'Sc': 44.955912, 'Ti': 47.867, 'V': 50.9415, 'Cr': 51.9961, 'Mn': 54.938045,

'Fe': 55.845, 'Co': 58.933195, 'Ni': 58.6934, 'Cu': 63.546, 'Zn': 65.409, 'Ga': 69.723, 'Ge': 72.64,

'As': 74.9216, 'Se': 78.96, 'Br': 79.904, 'Kr': 83.798, 'Rb': 85.4678, 'Sr': 87.62, 'Y': 88.90585,

'Zr': 91.224, 'Nb': 92.90638, 'Mo': 95.94, 'Tc': 98.9063, 'Ru': 101.07, 'Rh': 102.9055, 'Pd': 106.42,

'Ag': 107.8682, 'Cd': 112.411, 'In': 114.818, 'Sn': 118.71, 'Sb': 121.760, 'Te': 127.6,

'I': 126.90447, 'Xe': 131.293, 'Cs': 132.9054519, 'Ba': 137.327, 'La': 138.90547, 'Ce': 140.116,

'Pr': 140.90465, 'Nd': 144.242, 'Pm': 146.9151, 'Sm': 150.36, 'Eu': 151.964, 'Gd': 157.25,

'Tb': 158.92535, 'Dy': 162.5, 'Ho': 164.93032, 'Er': 167.259, 'Tm': 168.93421, 'Yb': 173.04,

'Lu': 174.967, 'Hf': 178.49, 'Ta': 180.9479, 'W': 183.84, 'Re': 186.207, 'Os': 190.23, 'Ir': 192.217,

'Pt': 195.084, 'Au': 196.966569, 'Hg': 200.59, 'Tl': 204.3833, 'Pb': 207.2, 'Bi': 208.9804,

'Po': 208.9824, 'At': 209.9871, 'Rn': 222.0176, 'Fr': 223.0197, 'Ra': 226.0254, 'Ac': 227.0278,

'Th': 232.03806, 'Pa': 231.03588, 'U': 238.02891, 'Np': 237.0482, 'Pu': 244.0642, 'Am': 243.0614,

'Cm': 247.0703, 'Bk': 247.0703, 'Cf': 251.0796, 'Es': 252.0829, 'Fm': 257.0951, 'Md': 258.0951,

'No': 259.1009, 'Lr': 262, 'Rf': 267, 'Db': 268, 'Sg': 271, 'Bh': 270, 'Hs': 269, 'Mt': 278,

'Ds': 281, 'Rg': 281, 'Cn': 285, 'Nh': 284, 'Fl': 289, 'Mc': 289, 'Lv': 292, 'Ts': 294, 'Og': 294,

'ZERO': 0}

Compound = input('Molar Mass Caluclator \nExample: H2O not h2o \nEnter Compound Formula: ')

IsPolyatomic, End, Multiply = False, False, False

PolyatomicMass, MM, Multiplier = 0, 0, 1

Element = 'ZERO'

for i in range(0, len(Compound) + 1):

E = Compound[i:i + 1]

if IsPolyatomic:

if End:

IsPolyatomic = False

MM += int(E) * PolyatomicMass

elif E.isdigit():

if Multiply: Multiplier = int(str(Multiplier) + E)

else: Multiplier = int(E)

Multiply = True

elif E.islower(): Element += E

elif E.isupper():

PolyatomicMass += Multiplier * MM_of_Elements[Element]

Element, Multiplier, Multiply = E, 1, False

elif E == ')':

PolyatomicMass += Multiplier * MM_of_Elements[Element]

Element, Multiplier = 'ZERO', 1

End, Multiply = True, False

elif E == '(':

MM += Multiplier * MM_of_Elements[Element]

Element, Multiplier = 'ZERO', 1

IsPolyatomic, Multiply = True, False

elif E.isdigit():

if Multiply:

Multiplier = int(str(Multiplier) + E)

else: Multiplier = int(E)

Multiply = True

elif E.islower(): Element += E

elif E.isupper():

MM += Multiplier * MM_of_Elements[Element]

Element, Multiplier, Multiply = E, 1, False

elif i == len(Compound):

MM += Multiplier * MM_of_Elements[Element]

Element, Multiplier, Multiply = E, 1, False

print(f'The Molar mass of {Compound} is {round(MM)} g/mol')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值