使用Python计算化学式的相对分子质量
受到邀请来帮同学计算其所采用的化学式的相对分子质量.本文详细介绍了如何识别化学式内元素,并对其化学式相对分子质量进行计算的过程.
输入化学式
在输入化学式的时候,需要将化学式中每个元素的个数进行表明.一个元素可以出现多次,但是每出现一次都要进行数量标记.例如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计算化学式的相对分子质量相关推荐
- 计算有机物的相对分子质量
计算有机物的相对分子质量 京东327数据分析笔试代码题1 C:12 O:16 H:1 N:14 例如: C2H5OH 46 CH2O 30 C10H12O9N22 584 C14HON2 CO2 44 ...
- 使用OpenCV和Python计算图像的“彩色度”
使用OpenCV和Python计算图像"彩色度" 1. 效果图 2. 炫彩度量方法是什么? 3. 源代码 参考 你是否尝试过计算每个图像的炫彩值,并根据炫彩值对自己的图像数据集进行 ...
- python ks值计算_利用Python计算KS的实例详解
在金融领域中,我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布.好的信用风控模型一般从准确性.稳定性和可解释性来评估模型.sOf免费资源网 一般来说.好人样本的分布同坏人样本的分布应该是有很 ...
- python计算现场得分_浅谈用 Python 计算文本 BLEU 分数
浅谈用 Python 计算文本 BLEU 分数 BLEU, 全称为 Bilingual Evaluation Understudy(双语评估替换), 是一个比较候选文本翻译与其他一个或多个参考翻译的评 ...
- 概率统计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 ...
- python根据词向量计算相似度_如何使用gensim的word2vec模型和python计算句子相似度...
如何使用gensim的word2vec模型和python计算句子相似度 根据Gensim Word2Vec,我可以使用gensim包中的word2vec模型来计算2个单词之间的相似度. 例如 trai ...
- 北理工嵩天Python语言程序设计笔记(10 Python计算生态概览)
前言 本文是对<北理工 嵩天/黄天宇/礼欣 Python语言程序设计>的学习笔记,供自己查阅使用. 文章目录 北理工嵩天Python语言程序设计笔记(目录) 北理工嵩天Python语言程序 ...
- MOOC《Python语言程序设计》(第15次)Python计算生态概览(第九周)
MOOC<Python语言程序设计>(第15次) Python计算生态概览(第九周)21.8.26 文章目录 MOOC<Python语言程序设计>(第15次) Python计算 ...
- 「化学」相对分子质量
题目描述 做化学题时,小 F 总是里算错相对分子质量,这让他非常苦恼. 小 F 找到了你,请你来帮他算一算给定物质的相对分子质量. 如果你没有学过相关内容也没有关系,你可以从样例和提示里理解该题所求内 ...
最新文章
- 一种新的Heap区溢出技术分析[转贴]
- UA MATH567 高维统计II 随机向量9 图的Max-cut问题 0.878近似算法
- [USACO1.4]母亲的牛奶 Mother's Milk
- ios越狱系统UIGestureRecognizer事件截获问题
- java fastjson 泛型_解决fastjson泛型转换报错的解决方法
- 【Python配置】Win10配置Python3、Numpy、PyCharm、Anaconda
- Chinalinuxpub.com初学版精华
- 手把手教你微信小程序开发
- 【OpenCV】 300行写出全能扫描王
- 推荐一款待办事项和日程管理的微信小程序——腾讯待办
- dtm文件生成等高线 lisp_CAD2000下DTM的建立
- 关闭极域电子教室文档
- Linux debian利用ifconfig查看IP地址
- 快速将bmp批量转换jpg的方法
- UVA - 12304(B - 2D Geometry 110 in 1!)计算几何板子
- jsp怎样写一个Button onclick事件
- 颈椎病的成因及治疗预防方法
- ORACLE:单行函数
- 获取电影天堂电视剧下载页面所有url地址
- python处理时序数据总结