加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

根据化学元素周期表来计算化合物的分子量(用python实现)

(2013-03-18 14:23:59)
标签:

教育

假定有一个元素周期表文件(用csv格式保存),文件内容如下:
atomic #,atomic symbol,Group #,Old Group #,Period,"English 
element name",atomic mass (rounded),ions commonly formed
1,H,1,I A,1,hydrogen,1.008,±1
2,He,18,VIII A,1,helium,4.003,
3,Li,1,I A,2,lithium,6.941,1
4,Be,2,II A,2,beryllium,9.012,2
5,B,13,III A,2,boron,10.81,3
6,C,14,IV A,2,carbon,12.01,?4
7,N,15,V A,2,nitrogen,14.01,?3
8,O,16,VI A,2,oxygen,16,?2
9,F,17,VII A,2,fluorine,19,?1
10,Ne,18,VIII A,2,neon,20.18,
11,Na,1,I A,3,sodium,22.99,1
12,Mg,2,II A,3,magnesium,24.31,2
13,Al,13,III A,3,aluminum,26.98,3
14,Si,14,IV A,3,silicon,28.09,?4
15,P,15,V A,3,phosphorus,30.97,?3
16,S,16,VI A,3,sulfur,32.07,?2
17,Cl,17,VII A,3,chlorine,35.45,?1
18,Ar,18,VIII A,3,argon,39.95,
19,K,1,I A,4,potassium,39.1,1
20,Ca,2,II A,4,calcium,40.08,2
21,Sc,3,III B,4,scandium,44.96,3
22,Ti,4,IV B,4,titanium,47.87,"+4,3,2"
23,V,5,V B,4,vanadium,50.94,"+5,2,3,4"
24,Cr,6,VI B,4,chromium,52,"+3,2,6"
25,Mn,7,VII B,4,manganese,54.94,"+2,3,4,6,7"
26,Fe,8,VIII B,4,iron,55.85,"+3,2"
27,Co,9,VIII B,4,cobalt,58.93,"+2,3"
28,Ni,10,VIII B,4,nickel,58.69,"+2,3"
29,Cu,11,I B,4,copper,63.55,"+2,1"
30,Zn,12,II B,4,zinc,65.41,2
31,Ga,13,III A,4,gallium,69.72,3
32,Ge,14,IV A,4,germanium,72.64,"+4,2"
33,As,15,V A,4,arsenic,74.92,?3
34,Se,16,VI A,4,selenium,78.96,?2
35,Br,17,VII A,4,bromine,79.9,?1
36,Kr,18,VIII A,4,krypton,83.8,
37,Rb,1,I A,5,rubidium,85.47,1
38,Sr,2,II A,5,strontium,87.62,2
39,Y,3,III B,5,yttrium,88.91,3
40,Zr,4,IV B,5,zirconium,91.22,4
41,Nb,5,VI B,5,niobium,92.91,"+5,3"
42,Mo,6,VI B,5,molybdenum,95.94,"+6,3,5"
43,Tc,7,VII B,5,technetium,98,"+7,4,6"
44,Ru,8,VIII B,5,ruthenium,101.1,"+4,3,6,8"
45,Rh,9,VIII B,5,rhodium,102.9,"+3,4,6"
46,Pd,10,VIII B,5,palladium,106.4,"+2,4"
47,Ag,11,I B,5,silver,107.9,1
48,Cd,12,II B,5,cadmium,112.4,2
49,In,13,III A,5,indium,114.8,3
50,Sn,14,IV A,5,tin,118.7,"+4,2"
51,Sb,15,V A,5,antimony,121.8,"+3,5"
52,Te,16,VI A,5,tellurium,127.6,?2
53,I,17,VII A,5,iodine,126.9,?1
54,Xe,18,VIII A,5,xenon,131.3,
55,Cs,1,I A,6,cesium,132.9,1
56,Ba,2,II A,6,barium,137.3,2
57,La,lanthanides,III B,6,lanthanum,138.9,3
58,Ce,lanthanides,lanthanides,6,cerium,140.1,"+3,4"
59,Pr,lanthanides,lanthanides,6,praseodymium,140.9,"+3,4"
60,Nd,lanthanides,lanthanides,6,neodymium,144.2,3
61,Pm,lanthanides,lanthanides,6,promethium,145,3
62,Sm,lanthanides,lanthanides,6,samarium,150.4,"+3,2"
63,Eu,lanthanides,lanthanides,6,europium,152,"+3,2"
64,Gd,lanthanides,lanthanides,6,gadolinium,157.3,3
65,Tb,lanthanides,lanthanides,6,terbium,158.9,"+3,4"
66,Dy,lanthanides,lanthanides,6,dysprosium,162.5,3
67,Ho,lanthanides,lanthanides,6,holmium,164.9,3
68,Er,lanthanides,lanthanides,6,erbium,167.3,3
69,Tm,lanthanides,lanthanides,6,thulium,168.9,"+3,2"
70,Yb,lanthanides,lanthanides,6,ytterbium,173,"+3,2"
71,Lu,3,lanthanides,6,lutetium,175,3
72,Hf,4,IV B,6,hafnium,178.5,4
73,Ta,5,V B,6,tantalum,180.9,5
74,W,6,VI B,6,tungsten,183.8,"+6,4"
75,Re,7,VII B,6,rhenium,186.2,"+7,4,6"
76,Os,8,VIII B,6,osmium,190.2,"+4,6,8"
77,Ir,9,VIII B,6,iridium,192.2,"+4,3,6"
78,Pt,10,VIII B,6,platinum,195.1,"+4,2"
79,Au,11,I B,6,gold,197,"+3,1"
80,Hg,12,II B,6,mercury,200.6,"+2,1"
81,Tl,13,III A,6,thallium,204.4,"+1,3"
82,Pb,14,IV A,6,lead,207.2,"+2,4"
83,Bi,15,V A,6,bismuth,209,"+3,5"
84,Po,16,VI A,6,polonium,209,"+4,2"
85,At,17,VII A,6,astatine,210,
86,Rn,18,VIII A,6,radon,222,
87,Fr,1,I A,7,francium,223,1
88,Ra,2,II A,7,radium,226,2
89,Ac,actinides,III B,7,actinium,227,3
90,Th,actinides,actinides,7,thorium,232,4
91,Pa,actinides,actinides,7,protactinium,231,"+5,4"
92,U,actinides,actinides,7,uranium,238,"+6,3,4,5"
93,Np,actinides,actinides,7,neptunium,237,"+5,3,4,6"
94,Pu,actinides,actinides,7,plutonium,239,"+4,3,5,6"
95,Am,actinides,actinides,7,americium,243,"+3,4,5,6"
96,Cm,actinides,actinides,7,curium,247,3
97,Bk,actinides,actinides,7,berkelium,247,"+3,4"
98,Cf,actinides,actinides,7,californium,251,3
99,Es,actinides,actinides,7,einsteinium,252,3
100,Fm,actinides,actinides,7,fermium,257,3
101,Md,actinides,actinides,7,mendelevium,258,"+3,2"
102,No,actinides,actinides,7,nobelium,259,"+2,3"
103,Lr,3,actinides,7,lawrencium,262,3
104,Rf,4,IV B,7,rutherfordium,261,
105,Db,5,V B,7,dubnium,262,
106,Sg,6,VI B,7,seaborgium,266,
107,Bh,7,VII B,7,bohrium,264,
108,Hs,8,VIII B,7,hassium,277,
109,Mt,9,VIII B,7,meitnerium,268,
110,Ds,10,VIII B,7,darmstadtium,281,
111,Rg,11,I B,7,roentgentium,272,
112,Cn,12,II B,7,copernicum,285,
113,Uut,13,III A,7,ununtrium,284,
114,Fl,14,IV A,7,flerovium,289,
115,Uup,15,V A,7,ununpentium,288,
116,Lv,16,VI A,7,livermorium,292,
117,Uus,17,VII A,7,ununseptium,293,
118,Uuo,18,VIII A,7,ununoctium,294,
其中,第二列表示元素的名称,第七列表示该元素的原子量。那么要求输入一个化合物的分子式,如:
H2so4,输入时的用如下的方法:H2-S-O4,则求该化合物的分子量的代码如下:

#mytest用来计算分子量
import csv
fileobj=open("periodic-table.csv","rU")  #假定元素周期表的文件是periodic-table.csv
datafile=csv.reader(fileobj)
mytable={} #初始列表为空
for line in datafile:
    mytable[line[1]]=line[6]
print(mytable) #输出自己建的元素名和元素原子量对应的字典

mystr=input("请输入您要检索的分子化合物,如h2-s-o4:")
mylist=mystr.split('-')
print(mylist)
mass=0
for every in mylist:
    symbol=""      
    quality=""
    for c in every:
       if c.isalpha():
           symbol=symbol+c
       else:
            quality=quality+c
    if quality=="":
        quality=1
    mass=mass+float(mytable[symbol])*int(quality)
print("您查找的化合物的分子量是:",mass)
程序运行的结果如下:
请输入您要检索的分子化合物,如h2-s-o4:C-O2
['C', 'O2']
您查找的化合物的分子量是: 44.01

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有