根据化学元素周期表来计算化合物的分子量(用python实现)
(2013-03-18 14:23:59)
标签:
教育 |
假定有一个元素周期表文件(用csv格式保存),文件内容如下:
mytable[line[1]]=line[6]
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)
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:
print(mytable) #输出自己建的元素名和元素原子量对应的字典
mystr=input("请输入您要检索的分子化合物,如h2-s-o4:")
mylist=mystr.split('-')
print(mylist)
mass=0
for every in mylist:
print("您查找的化合物的分子量是:",mass)
程序运行的结果如下:
请输入您要检索的分子化合物,如h2-s-o4:C-O2
['C', 'O2']
您查找的化合物的分子量是:
44.01