问题是:给定类似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解析化学公式相关推荐

  1. python编程是干嘛的-学 Python 都用来干嘛的?

    /> 说起编程语言,Python 也许不是使用最广的,但一定是现在被谈论最多的.随着近年大数据.人工智能的兴起,Python 越来越多的出现在人们的视野中. /> 那么人们在谈论 Pyth ...

  2. 学python可以做什么职业-学了Python,就能拿下这 7 个高薪的未来职业

    说起编程语言,Python 也许不是使用最广的,但一定是现在被谈论最多的.随着近年大数据.人工智能的兴起,Python 越来越多的出现在人们的视野中. 那么人们在谈论 Python 的时候究竟在谈论什 ...

  3. 年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库

    我是 环境管理 管理 Python 版本和环境的工具 pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环 ...

  4. 【Python】整理了上千个Python类库,简直太酷啦!

    Python 生态,向来以各种类库齐全而闻名,这也是这门语言如此受欢迎的重要原因.今天就给大家分享一下这几天的战果,宵衣旰食,不眠不休的整理了近千个 Python 库,收藏的同时,给个在看不为过吧! ...

  5. Python 标准库之 xml.etree.ElementTree xml解析

    Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...

  6. 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 ...

  7. python速成要多久2019-8-28_2019最全Python入门学习路线,不是我吹,绝对是最全

    近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多.一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学 ...

  8. python和anaconda的区别_anaconda和python区别

    详细内容 python python自身缺少numpy.matplotlib.scipy.scikit-learn....等一系列包,需要我们安装pip来导入这些包才能进行相应运算(python3.5 ...

  9. 数据科学Python训练营课程:从初级到高级 Python for Data Science Bootcamp Course:Beginner to Advanced

    通过代码实现.示例等,掌握您需要了解的关于Python.Pandas和Numpy的一切! 你会学到什么 通过代码实现.示例等,掌握您需要了解的关于Python.Pandas和Numpy的一切! 学习高 ...

  10. 【Python之路】第二篇--初识Python

    Python简介 Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube.D ...

最新文章

  1. linux下文本模式不能登录,图形可以登录
  2. 想要阅读一些开源项目或框架的源代码,不知道从哪里入手?
  3. 总是忘记的oracle 函数
  4. Arrays工具类和二维数组
  5. 我的软件开发生涯 (10年开发经验总结和爆栈人生)
  6. Macbookpro安装JDK8及环境配置
  7. php 银行卡四要素验证,基于PHP的银行卡号实名认证(四要素)示例代码-六派数据...
  8. psd转html 织梦,如何将PSD模型转化成XHTML和CSS文件
  9. 解决应用未安装 Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
  10. OSChina 周四乱弹 ——丑到端水水更流,举杯浇丑丑更丑
  11. oracle pdb监听配置,oracle 12c 监听
  12. 【Nginx 快速入门】反向代理、负载均衡、动静分离
  13. 南丁格尔玫瑰图 With ggplot2【R语言】
  14. GNS3的RIP协议的动态路由配置
  15. 收费变免费,是商业模式的颠覆式创新
  16. STM32系列之HAL库开发
  17. JavaScript创始人Brendan Eich访谈录(转)
  18. HbuilderX连接小米手机/运行到小程序
  19. 0-2岁宝宝早教全攻略
  20. usb子系统分析2(usb设备识别过程)

热门文章

  1. 省略号和可变参数模板
  2. Linux chgrp chown chmod 基础知识
  3. 汇编程序-更灵活的定位内存地址方法
  4. 更新源列表及设置方法
  5. MODIS(TerraAqua)陆地标准产品
  6. HMM学习最佳范例三:隐藏模式
  7. Best jQuery Plugins of 2010
  8. C/C++变量存储区域
  9. 基于Ajax的Web框架Echo2 2.0发布
  10. 下列有关python语言的说法正确的是-关于 Python 语言的注释,以下选项中描述正确的是( )...