问题是:给定类似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能做什么?

    1.学习完Python之后能做什么呢? 近年来,Python因为简单易学.功能强大成为最近大火的编程语言,大家在学习的过程中,也不可避免会想到学习完Python之后能做些什么呢?Python语言能做到 ...

  2. 学会python爬虫怎么赚钱-转行学Python有前途吗?Python爬虫怎么赚钱?

    Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,Python 已经成为继JAVA,C++之后的第三大语言.下面就跟着千锋一起来看看吧! Python的特点:简单易学.免费开源 ...

  3. 学python有前途吗-学python有前途吗?

    为什么越来越多的爱尚沈阳python培训的学员选择python,是因为相对于Java.C语言等,Python简单易学,更适合没有编程基础的小白入门.适合转行的学员,Python的语言没有多少仪式化的东 ...

  4. 化学人学python有前途吗-转载:python之蟒开启理论计算化学的新时代

    转载:python之蟒开启理论计算化学的新时代 (2014-01-23 23:04:00) 标签: python gaussian python之蟒开启理论计算化学的新时代 就像iphone和andr ...

  5. 学python有前途吗-现在学Python还有前途吗?能做什么?

    现在学Python还有前途吗?能做什么?无论是从行业人才需求,国家政策支持,还是从Python本身广泛应用的优势来看,学Python都是极其有个人发展前途的.至于可以从事的工作岗位就更多了,像Linu ...

  6. 32岁学python有前途吗_Python发展前景如何?学习Python游戏开发有前途吗?

    Python发展前景如何?学习Python游戏开发有前途吗? 时间:2018-04-02 15:48:31 | 来源:千锋教育 | 作者:alents 学习Python的人都知道一句话:人生苦短,我用 ...

  7. 32岁学python有前途吗_新手小白学Python有前途吗

    很多同学在选择学习python之初,可能都有这样的疑惑:学Python有前途吗?对于新兴的事物,人们慢慢接受是需要一个过程的,那究竟学python有没有前途呢?今天北大青鸟小编就来给大家指导一下迷津. ...

  8. 女生学python好就业吗-新手小白学Python有前途吗

    很多同学在选择学习python之初,可能都有这样的疑惑:学Python有前途吗?对于新兴的事物,人们慢慢接受是需要一个过程的,那究竟学python有没有前途呢?今天北大青鸟小编就来给大家指导一下迷津. ...

  9. 0基础转行学Python有前途吗?培训靠谱吗

    Python语言的流行热度最近几年都是大家有目共睹的事情,根据相关数据显示,随着近些年的发展,Python已经成为了四大编程语言之一,从云端.客户端到物联网中,Python的发展是无处不在的,市场人才 ...

最新文章

  1. Go在windows10 64位上安装过程
  2. android studio设置JDK路径
  3. JSON学习笔记(三)- 数组
  4. 深入理解C++对象模型-对象的内存布局,vptr,vtable
  5. 休眠锁定模式– PESSIMISTIC_READ和PESSIMISTIC_WRITE如何工作
  6. JAVA 多线程 JAVA 如何开发一个自定义线程池
  7. Nt/2000/xp平台下的存储控制模型(Access Control Model)
  8. Java try和catch的使用介绍
  9. python如何读取文本_python 如何读取windows-1252格式文本?
  10. FFmpeg学习(6)——视频拼接
  11. 4200: [Noi2015]小园丁与老司机
  12. ACdream - 1069 - 无耻的出题人
  13. Shine 和 8hz-mp3
  14. 天秤座 的个人分析,真的很准,这段时间一直在关注星座。
  15. 球形罩铆接机械臂设计(lunwen+开题报告+指导记录+设计图纸+PLC控制程序)
  16. python数据分析之matplotlib(一)
  17. 文明重启怎么做RUST堡垒_文明重启怎么地下建房-地下建房技巧
  18. 数字图像处理之用Python+GDAL实现BSQ格式转换为BIP格式,BIL格式转换为BSQ,BIP格式
  19. 如何分享10亿月活红利?揭秘拥抱小程序电商的正确姿势
  20. sqlite如何在android上编译,如何在Android中使用SQLITE中的准备语句?

热门文章

  1. Java LRU的实现
  2. Mac上配置Privoxy
  3. Java并发(一)——线程安全的容器(上)
  4. 第四十二节,configparser特定格式的ini配置文件模块
  5. 【面试那点儿事】囧,分机号的故事
  6. UVA485 Pascal‘s Triangle of Death【大数】
  7. UVA669 LA5662 Defragment【暴力】
  8. UVA10193 All You Need Is Love【进制+GCD】
  9. CCF201912-1 报数(100分)【模拟】
  10. UVA11384 Help is needed for Dexter【数学】