化学人学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能做什么?
1.学习完Python之后能做什么呢? 近年来,Python因为简单易学.功能强大成为最近大火的编程语言,大家在学习的过程中,也不可避免会想到学习完Python之后能做些什么呢?Python语言能做到 ...
- 学会python爬虫怎么赚钱-转行学Python有前途吗?Python爬虫怎么赚钱?
Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,Python 已经成为继JAVA,C++之后的第三大语言.下面就跟着千锋一起来看看吧! Python的特点:简单易学.免费开源 ...
- 学python有前途吗-学python有前途吗?
为什么越来越多的爱尚沈阳python培训的学员选择python,是因为相对于Java.C语言等,Python简单易学,更适合没有编程基础的小白入门.适合转行的学员,Python的语言没有多少仪式化的东 ...
- 化学人学python有前途吗-转载:python之蟒开启理论计算化学的新时代
转载:python之蟒开启理论计算化学的新时代 (2014-01-23 23:04:00) 标签: python gaussian python之蟒开启理论计算化学的新时代 就像iphone和andr ...
- 学python有前途吗-现在学Python还有前途吗?能做什么?
现在学Python还有前途吗?能做什么?无论是从行业人才需求,国家政策支持,还是从Python本身广泛应用的优势来看,学Python都是极其有个人发展前途的.至于可以从事的工作岗位就更多了,像Linu ...
- 32岁学python有前途吗_Python发展前景如何?学习Python游戏开发有前途吗?
Python发展前景如何?学习Python游戏开发有前途吗? 时间:2018-04-02 15:48:31 | 来源:千锋教育 | 作者:alents 学习Python的人都知道一句话:人生苦短,我用 ...
- 32岁学python有前途吗_新手小白学Python有前途吗
很多同学在选择学习python之初,可能都有这样的疑惑:学Python有前途吗?对于新兴的事物,人们慢慢接受是需要一个过程的,那究竟学python有没有前途呢?今天北大青鸟小编就来给大家指导一下迷津. ...
- 女生学python好就业吗-新手小白学Python有前途吗
很多同学在选择学习python之初,可能都有这样的疑惑:学Python有前途吗?对于新兴的事物,人们慢慢接受是需要一个过程的,那究竟学python有没有前途呢?今天北大青鸟小编就来给大家指导一下迷津. ...
- 0基础转行学Python有前途吗?培训靠谱吗
Python语言的流行热度最近几年都是大家有目共睹的事情,根据相关数据显示,随着近些年的发展,Python已经成为了四大编程语言之一,从云端.客户端到物联网中,Python的发展是无处不在的,市场人才 ...
最新文章
- Go在windows10 64位上安装过程
- android studio设置JDK路径
- JSON学习笔记(三)- 数组
- 深入理解C++对象模型-对象的内存布局,vptr,vtable
- 休眠锁定模式– PESSIMISTIC_READ和PESSIMISTIC_WRITE如何工作
- JAVA 多线程 JAVA 如何开发一个自定义线程池
- Nt/2000/xp平台下的存储控制模型(Access Control Model)
- Java try和catch的使用介绍
- python如何读取文本_python 如何读取windows-1252格式文本?
- FFmpeg学习(6)——视频拼接
- 4200: [Noi2015]小园丁与老司机
- ACdream - 1069 - 无耻的出题人
- Shine 和 8hz-mp3
- 天秤座 的个人分析,真的很准,这段时间一直在关注星座。
- 球形罩铆接机械臂设计(lunwen+开题报告+指导记录+设计图纸+PLC控制程序)
- python数据分析之matplotlib(一)
- 文明重启怎么做RUST堡垒_文明重启怎么地下建房-地下建房技巧
- 数字图像处理之用Python+GDAL实现BSQ格式转换为BIP格式,BIL格式转换为BSQ,BIP格式
- 如何分享10亿月活红利?揭秘拥抱小程序电商的正确姿势
- sqlite如何在android上编译,如何在Android中使用SQLITE中的准备语句?