python在化学方面的应用-用Python解析化学公式
问题是:给定类似C(Mg2(OH)4)2的公式,返回包含元素及其计数的哈希表.元素名称始终以大写字母开头,并且可以以小写字母开头.
我认为我首先要解决最简单的情况:没有括号.
def bracket_hash(formula):
element = ""
atom_count = 0
element_hash = {}
for x in formula:
if x.isupper():
if element!="":
element_hash[element] = 1
element = ""
element = x
elif x.islower():
element += x
else:
element_count = int(x)
element_hash[element] = element_count
element_count = 0
element = ""
if element!="":
element_hash[element] = 1
return element_hash
此代码在以下情况下可以正常工作:
print(bracket_hash("H2O"))
print(bracket_hash("CO2"))
print(bracket_hash("Mg2O4"))
print(bracket_hash("OH"))
现在我认为必须以某种方式使用堆栈来处理OH(Ag3(OH)2)4等多括号的情况,这里Ag的计数必须为3 * 4,O和H的计数必须为2 * 4 1.
到目前为止,我开始是这样的:
def formula_hash(formula):
stack = []
final_hash = {}
cur = ""
i = 0
while i < len(formula):
if formula[i] == '(':
j = i
while formula[j]!=')':
j = j + 1
cur = formula[i:j]
stack.append(bracket_hash(cur))
cur = ""
i = j + 1
但是现在我被困住了.
随着编码问题变得越来越长,并且涉及到混合数据结构来解决,我有点陷入困境.在这里,他们使用哈希表和堆栈.
所以我的问题是:如何将这个问题分解为可管理的部分并加以解决.如果确实要解决此问题,则必须将其映射到可管理的代码段.任何帮助将不胜感激.
谢谢.
解决方法:
我认为您可以使用递归来解决此问题.这是您的函数应如何工作:
>就像您在第一个代码中一样,直到遇到左括号.
>遇到左括号,请找到相应的右括号.这可以通过一个计数器来完成:将其初始化为1,然后在遇到新的右括号时,将计数器递增,而在遇到右括号时,将其递减.当计数器等于0时,您已找到匹配的右括号.
>在括号之间剪切字符串,并使用该字符串调用相同的函数(这是递归方面).
>将返回的字典中的值添加到当前字典中,然后乘以括号后面的数字.
如果您在实施此解决方案的某些部分时遇到问题,请告诉我,我将提供更多详细信息.
编辑:关于堆栈方法
堆栈方法只是模拟递归.它具有一堆计数器,而不是再次调用该函数并具有本地计数器.当打开括号时,它会在此上下文中计数;当关闭括号时,它将与包含它的上下文合并,并具有相应的多重性.
到目前为止,我更喜欢递归方法,这种方法更自然.
标签:data-structures,stack,hash,python,algorithm
来源: https://codeday.me/bug/20191025/1927824.html
python在化学方面的应用-用Python解析化学公式相关推荐
- python编程是干嘛的-学 Python 都用来干嘛的?
/> 说起编程语言,Python 也许不是使用最广的,但一定是现在被谈论最多的.随着近年大数据.人工智能的兴起,Python 越来越多的出现在人们的视野中. /> 那么人们在谈论 Pyth ...
- 学python可以做什么职业-学了Python,就能拿下这 7 个高薪的未来职业
说起编程语言,Python 也许不是使用最广的,但一定是现在被谈论最多的.随着近年大数据.人工智能的兴起,Python 越来越多的出现在人们的视野中. 那么人们在谈论 Python 的时候究竟在谈论什 ...
- 年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库
我是 环境管理 管理 Python 版本和环境的工具 pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环 ...
- 【Python】整理了上千个Python类库,简直太酷啦!
Python 生态,向来以各种类库齐全而闻名,这也是这门语言如此受欢迎的重要原因.今天就给大家分享一下这几天的战果,宵衣旰食,不眠不休的整理了近千个 Python 库,收藏的同时,给个在看不为过吧! ...
- Python 标准库之 xml.etree.ElementTree xml解析
Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...
- uwsgi 安装报错 plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
1. Python3 安装 uwsgi 报错 直接使用命令 sudo pip3 install uwsgi 安装如下错误: ubuntu@ubuntu:~/Downloads$ sudo pip3 i ...
- python速成要多久2019-8-28_2019最全Python入门学习路线,不是我吹,绝对是最全
近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多.一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学 ...
- python和anaconda的区别_anaconda和python区别
详细内容 python python自身缺少numpy.matplotlib.scipy.scikit-learn....等一系列包,需要我们安装pip来导入这些包才能进行相应运算(python3.5 ...
- 数据科学Python训练营课程:从初级到高级 Python for Data Science Bootcamp Course:Beginner to Advanced
通过代码实现.示例等,掌握您需要了解的关于Python.Pandas和Numpy的一切! 你会学到什么 通过代码实现.示例等,掌握您需要了解的关于Python.Pandas和Numpy的一切! 学习高 ...
- 【Python之路】第二篇--初识Python
Python简介 Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube.D ...
最新文章
- linux下文本模式不能登录,图形可以登录
- 想要阅读一些开源项目或框架的源代码,不知道从哪里入手?
- 总是忘记的oracle 函数
- Arrays工具类和二维数组
- 我的软件开发生涯 (10年开发经验总结和爆栈人生)
- Macbookpro安装JDK8及环境配置
- php 银行卡四要素验证,基于PHP的银行卡号实名认证(四要素)示例代码-六派数据...
- psd转html 织梦,如何将PSD模型转化成XHTML和CSS文件
- 解决应用未安装 Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
- OSChina 周四乱弹 ——丑到端水水更流,举杯浇丑丑更丑
- oracle pdb监听配置,oracle 12c 监听
- 【Nginx 快速入门】反向代理、负载均衡、动静分离
- 南丁格尔玫瑰图 With ggplot2【R语言】
- GNS3的RIP协议的动态路由配置
- 收费变免费,是商业模式的颠覆式创新
- STM32系列之HAL库开发
- JavaScript创始人Brendan Eich访谈录(转)
- HbuilderX连接小米手机/运行到小程序
- 0-2岁宝宝早教全攻略
- usb子系统分析2(usb设备识别过程)