受到邀请来帮同学计算其所采用的化学式的相对分子质量.本文详细介绍了如何识别化学式内元素,并对其化学式相对分子质量进行计算的过程.

输入化学式

在输入化学式的时候,需要将化学式中每个元素的个数进行表明.一个元素可以出现多次,但是每出现一次都要进行数量标记.例如C2H5OH要写为C2H5O1H1,方便我们之后对化学式进行元素与数字的划分.输入数据应为string型,以便算法对其进行处理.

// 输入化学式
a="C2H5O1H1";
b="Ca1(O1H1)2";

构建元素原子质量列表

如果我们需要计算相对分子质量的化学式用到的元素不是太多,我们可以仅对使用的元素原子质量列表进行搭建。首先建立元素名称列表和元素质量列表,然后再将其进行匹配。我们要注意的就是将元素名称与质量进行对应就可以了。因为我们采用len(name)来表示元素的个数,所以我们无论插入多少个均能实现完美匹配。

// 构建元素原子质量列表
name=["H","C","O","Ca"]
quality=["1","12","16","32"]
D=[]
for e in range(len(name)):D+=[[name[e],quality[e]]]

计算化学式的相对分子质量

为了区分原子,我采用在元素前面添加加号的方式将不同的原子分隔开,即在大写字母之前添加+。并在原子与原子个数之间加入乘号。

// 调整化学式格式
for e in range(65,65+26):e=chr(e)a=a.replace(e,"+"+e)
for e in range(10):a=a.replace(str(e),"*"+str(e))

但是如果原子个数超过个位数,就会导致算法在原子个数中间也添加了乘号。例如H10,经过上一步处理之后会得到 H ∗ 1 ∗ 0 H*1*0 H∗1∗0的结果,而不是我们想要的 H ∗ 10 H*10 H∗10。我用以下语句对其进行改进。

// 调整元素个数计算格式
for e in range(10):a=a.replace("*"+str(e)+"*","*"+str(e))

当化学式中存在有括号的情况时,我们还需将括号与加号进行位置调换。

// 调整括号位置
a=a.replace("(+","+(")

接下来将元素所代表的原子质量代替到我们的计算式中。由于元素是由一个或者两个字母构成的,我们需要先将两个字母的元素进行数值替换。再对一个字母的元素进行数值替换。

// 调整括号位置
for e in D:if len(e[0])==2:a=a.replace(e[0],e[1])
for e in D:a=a.replace(e[0],e[1])

经过上面的几个步骤的处理,可以将化学式C2H5OH转变为 12 ∗ 2 + 1 ∗ 5 + 16 ∗ 1 + 1 ∗ 1 12*2+1*5+16*1+1*1 12∗2+1∗5+16∗1+1∗1,化学式Ca(OH)2转变为 32 ∗ 1 + ( 16 ∗ 1 + 1 ∗ 1 ) ∗ 2 32*1+(16*1+1*1)*2 32∗1+(16∗1+1∗1)∗2。然后再对其进行运算,得到相应化学式的相对分子质量。

// 计算相对分子质量
a=eval(a)
print(a)

使用Python计算化学式的相对分子质量相关推荐

  1. 计算有机物的相对分子质量

    计算有机物的相对分子质量 京东327数据分析笔试代码题1 C:12 O:16 H:1 N:14 例如: C2H5OH 46 CH2O 30 C10H12O9N22 584 C14HON2 CO2 44 ...

  2. 使用OpenCV和Python计算图像的“彩色度”

    使用OpenCV和Python计算图像"彩色度" 1. 效果图 2. 炫彩度量方法是什么? 3. 源代码 参考 你是否尝试过计算每个图像的炫彩值,并根据炫彩值对自己的图像数据集进行 ...

  3. python ks值计算_利用Python计算KS的实例详解

    在金融领域中,我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布.好的信用风控模型一般从准确性.稳定性和可解释性来评估模型.sOf免费资源网 一般来说.好人样本的分布同坏人样本的分布应该是有很 ...

  4. python计算现场得分_浅谈用 Python 计算文本 BLEU 分数

    浅谈用 Python 计算文本 BLEU 分数 BLEU, 全称为 Bilingual Evaluation Understudy(双语评估替换), 是一个比较候选文本翻译与其他一个或多个参考翻译的评 ...

  5. 概率统计Python计算:贝叶斯公式

    根据完备事件组A1,A2,-,AnA_1, A_2,\dots , A_nA1​,A2​,-,An​的先验概率序列P(A1),P(A2),-,P(An)P(A_1), P(A_2), \dots, P ...

  6. python根据词向量计算相似度_如何使用gensim的word2vec模型和python计算句子相似度...

    如何使用gensim的word2vec模型和python计算句子相似度 根据Gensim Word2Vec,我可以使用gensim包中的word2vec模型来计算2个单词之间的相似度. 例如 trai ...

  7. 北理工嵩天Python语言程序设计笔记(10 Python计算生态概览)

    前言 本文是对<北理工 嵩天/黄天宇/礼欣 Python语言程序设计>的学习笔记,供自己查阅使用. 文章目录 北理工嵩天Python语言程序设计笔记(目录) 北理工嵩天Python语言程序 ...

  8. MOOC《Python语言程序设计》(第15次)Python计算生态概览(第九周)

    MOOC<Python语言程序设计>(第15次) Python计算生态概览(第九周)21.8.26 文章目录 MOOC<Python语言程序设计>(第15次) Python计算 ...

  9. 「化学」相对分子质量

    题目描述 做化学题时,小 F 总是里算错相对分子质量,这让他非常苦恼. 小 F 找到了你,请你来帮他算一算给定物质的相对分子质量. 如果你没有学过相关内容也没有关系,你可以从样例和提示里理解该题所求内 ...

最新文章

  1. 一种新的Heap区溢出技术分析[转贴]
  2. UA MATH567 高维统计II 随机向量9 图的Max-cut问题 0.878近似算法
  3. [USACO1.4]母亲的牛奶 Mother's Milk
  4. ios越狱系统UIGestureRecognizer事件截获问题
  5. java fastjson 泛型_解决fastjson泛型转换报错的解决方法
  6. 【Python配置】Win10配置Python3、Numpy、PyCharm、Anaconda
  7. Chinalinuxpub.com初学版精华
  8. 手把手教你微信小程序开发
  9. 【OpenCV】 300行写出全能扫描王
  10. 推荐一款待办事项和日程管理的微信小程序——腾讯待办
  11. dtm文件生成等高线 lisp_CAD2000下DTM的建立
  12. 关闭极域电子教室文档
  13. Linux debian利用ifconfig查看IP地址
  14. 快速将bmp批量转换jpg的方法
  15. UVA - 12304(B - 2D Geometry 110 in 1!)计算几何板子
  16. jsp怎样写一个Button onclick事件
  17. 颈椎病的成因及治疗预防方法
  18. ORACLE:单行函数
  19. 获取电影天堂电视剧下载页面所有url地址
  20. python处理时序数据总结

热门文章

  1. Wannafly挑战赛26 B.冥土追魂 贪心
  2. Python函数之生成器
  3. 如何通俗地理解傅立叶变换?
  4. 《炬丰科技-半导体工艺》基板预栅极清洗的系统和方法
  5. matlab 工业相机 曝光时间_工业相机基本设置解析
  6. html设置图片的宽高
  7. 直通车没有展现量?那你一定不知道这几点!_淘宝直通车
  8. 值得长期持有的10只成长股
  9. POJ - 1088 滑雪 【DP】【DFS】
  10. 既然有公平锁,为什么还要有非公平锁