Advertisement

化学元素分子量、氧化物系数计算python类

阅读量:

在网上找到的分子量计算类,做了少量修改,有原子量、分子量、氧化物系数的计算。

复制代码
 import re

    
 wt_dict={ #该原子量数据从CRC手册第95版提取。
    
         "H":  1.008,
    
         "He":  4.002602,
    
         "Li":  6.94,
    
         "Be":  9.0121831,
    
         "B":  10.81,
    
         "C":  12.011,
    
         "N":  14.007,
    
         "O":  15.999,
    
         "F":  18.998403163,
    
         "Ne":  20.1797,
    
         "Na":  22.98976928,
    
         "Mg":  24.305,
    
         "Al":  26.9815385,
    
         "Si":  28.085,
    
         "P":  30.973761998,
    
         "S":  32.06,
    
         "Cl":  35.45,
    
         "Ar":  39.948,
    
         "K":  39.0983,
    
         "Ca":  40.078,
    
         "Sc":  44.955908,
    
         "Ti":  47.867,
    
         "V":  50.9415,
    
         "Cr":  51.9961,
    
         "Mn":  54.938044,
    
         "Fe":  55.845,
    
         "Co":  58.933194,
    
         "Ni":  58.6934,
    
         "Cu":  63.546,
    
         "Zn":  65.38,
    
         "Ga":  69.723,
    
         "Ge":  72.63,
    
         "As":  74.921595,
    
         "Se":  78.971,
    
         "Br":  79.904,
    
         "Kr":  83.798,
    
         "Rb":  85.4678,
    
         "Sr":  87.62,
    
         "Y":  88.90584,
    
         "Zr":  91.224,
    
         "Nb":  92.90637,
    
         "Mo":  95.95,
    
         "Ru":  101.07,
    
         "Rh":  102.9055,
    
         "Pd":  106.42,
    
         "Ag":  107.8682,
    
         "Cd":  112.414,
    
         "In":  114.818,
    
         "Sn":  118.71,
    
         "Sb":  121.76,
    
         "Te":  127.6,
    
         "I":  126.90447,
    
         "Xe":  131.293,
    
         "Cs":  132.90545196,
    
         "Ba":  137.327,
    
         "La":  138.90547,
    
         "Ce":  140.116,
    
         "Pr":  140.90766,
    
         "Nd":  144.242,
    
         "Sm":  150.36,
    
         "Eu":  151.964,
    
         "Gd":  157.25,
    
         "Tb":  158.92535,
    
         "Dy":  162.5,
    
         "Ho":  164.93033,
    
         "Er":  167.259,
    
         "Tm":  168.93422,
    
         "Yb":  173.054,
    
         "Lu":  174.9668,
    
         "Hf":  178.49,
    
         "Ta":  180.94788,
    
         "W":  183.84,
    
         "Re":  186.207,
    
         "Os":  190.23,
    
         "Ir":  192.217,
    
         "Pt":  195.084,
    
         "Au":  196.966569,
    
         "Hg":  200.592,
    
         "Tl":  204.38,
    
         "Pb":  207.2,
    
         "Bi":  208.9804,
    
         "Th":  232.0377,
    
         "Pa":  231.03588,
    
         "U":  238.02891,
    
         "Tc":  0,  #有些放射性元素的原子量没有提供,以0表示。
    
         "Pm":  0,
    
         "Po":  0,
    
         "At":  0,
    
         "Rn":  0,
    
         "Fr":  0,
    
         "Ra":  0,
    
         "Ac":  0,            
    
         "Np":  0,
    
         "Pu":  0,
    
         "Am":  0,
    
         "Cm":  0,
    
         "Bk":  0,
    
         "Cf":  0,
    
         "Es":  0,
    
         "Fm":  0,
    
         "Md":  0,
    
         "No":  0,
    
         "Lr":  0,
    
         "Rf":  0,
    
         "Db":  0,
    
         "Sg":  0,
    
         "Bh":  0,
    
         "Hs":  0,
    
         "Mt":  0,
    
         "Ds":  0,
    
         "Rg":  0,
    
         "Cn":  0,
    
         "Fl":  0,
    
         "Lv":  0}
    
 class Mole():
    
     @staticmethod#是否是化学元素
    
     def isElement( ele: str) -> bool:
    
     if ele in wt_dict.keys():
    
         return True
    
     else:
    
         return False
    
     @staticmethod#原子量
    
     def AtomicWeight( element: str) -> float:
    
     """
    
     根据元素名称返回其原子量,区分大小写的
    
     """
    
     if  len(element)>2:  # 元素名称长度不应超过2个字符.
    
         return None
    
     return wt_dict.get(element, 0.000)        
    
     
    
     @staticmethod#分子量
    
     def MolWt(formula:str) -> float:
    
     regStr="([A-Z]{1}[a-z]{0,1})([0-9]{0,3})"   #解析化学式的正则表达式 
    
     MatchList=re.findall(regStr, formula)
    
     cntMatchList=len(MatchList)
    
     i=0
    
     mW=0.000
    
     while i < cntMatchList:
    
         eleName=MatchList[i][0]
    
         eleCount= int(MatchList[i][1]) if len(MatchList[i][1])>0 else 1
    
         aw=Mole.AtomicWeight(eleName)
    
         if (aw==0): #防止错误表示不能及时识别出来。
    
             return 0
    
         mW += aw*eleCount
    
         i=i+1
    
     return mW
    
     @staticmethod #氧化物到单质的换算系数
    
     def Xishu(formula:str) -> float:
    
     regStr="([A-Z]{1}[a-z]{0,1})([0-9]{0,3})"   #解析化学式的正则表达式 
    
     MatchList=re.findall(regStr, formula)
    
     cntMatchList=len(MatchList)
    
     i=0
    
     mW=0.000
    
     r=[]
    
     while i < cntMatchList:
    
         eleName=MatchList[i][0]
    
         eleCount= int(MatchList[i][1]) if len(MatchList[i][1])>0 else 1
    
         r.append((eleName,eleCount))
    
         aw=Mole.AtomicWeight(eleName)
    
         if aw==0: #防止错误表示不能及时识别出来。
    
             return 0
    
         # mW += aw*eleCount
    
         i=i+1
    
     total=0
    
     ele_w=1
    
     for one in r:
    
         (eleName,eleCount)=one
    
         wt=Mole.AtomicWeight(eleName)*eleCount
    
         if eleName!="O":
    
             ele_w=wt
    
         total=total+wt
    
     return total/ele_w
    
     @staticmethod    
    
     def letters():#用于元素符号的字母
    
     r=[]
    
     for k in wt_dict.keys():
    
         print(k)
    
         for one in k:
    
             if one.upper() in r:
    
                 pass
    
             else:
    
                 r.append(one.upper())
    
     return r
    
 if __name__=="__main__":
    
     #find which letter not use in element
    
     r=Mole.letters()
    
     print(r,len(r))
    
     all=[]
    
     start=ord("A")
    
     stop=ord("Z")
    
     a=start
    
     while a<=stop:
    
     all.append(chr(a))
    
     a+=1
    
     for one in all:
    
     if one in r:
    
         pass
    
     else:
    
         print(one)#answer is Q
    
  
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/WtR0TEbeVCw5zyfPjGxnQsM3dgIc.png)

全部评论 (0)

还没有任何评论哟~