ccf-201912-3-化学方程式-python版本(正则、递归)

#题目
题目
输入、输出格式
测试点

#说明

最近学了点正则原打算用正则做,但是在括号嵌套方面正则表达式不懂处理,栈方面不熟悉就还没考虑。匹配化学元素和系数可以一个个字符处理没必要用正则,这里我是练习所以用了正则。
这道题的解题思路大多采用递归求解这里也是(如果有同学有其他思路请留言一起学习~~~),这题麻烦点的地方在于括号嵌套处理 。大体思路是 比如“CH4+2O2=CO2+2H2O”,用“=”切片分左右两部分,用”+“切片递归处理每一个化学式。
处理化学式思路是:化学式是字符串,利用索引从左到右一点一点处理直到字符串结束。遇到无括号直接是元素的就添加进记录,遇到括号就递归。

#输入样例
H2+O2=H2O
2H2+O2=2H2O
H2+Cl2=2NaCl
H2+Cl2=2HCl
CH4+2O2=CO2+2H2O
CaCl2+2AgNO3=Ca(NO3)2+2AgCl
3Ba(OH)2+2H3PO4=6H2O+Ba3(PO4)2
3Ba(OH)2+2H3PO4=Ba3(PO4)2+6H2O
4Zn+10HNO3=4Zn(NO3)2+NH4NO3+3H2O
4Au+8NaCN+2H2O+O2=4Na(Au(CN)2)+4NaOH
Cu+As=Cs+Au
N
Y
N
Y
Y
Y
Y
Y
Y
Y
N
#代码

    import re
    pattern_ele = re.compile(r'[A-Z][a-z]?') #匹配化学元素的模式
    pattern_lc = re.compile(r'^\d+') #匹配左边系数的模式
    pattern_rc = re.compile(r'\d+$') #匹配右边系数的模式
    pattern_term = re.compile(r'^[A-Z][a-z]?\d*') #匹配化学式中的项(元素部分)和系数
    #该函数用于处理系数和化学式
    '''
    if:处理测试编号点1-6
    elif/else:处理测试编号点7-10
    '''
    def deal_formula(ceof,formula,dic):
        i = 0
        while i < len(formula):
            term = pattern_term.match(formula
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值