分子量问题——读取字符串中连续数字以及字母。

题目:
现在,给你一种物质的分子式,请你求出分子量。规定分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。
如:
输入:C6H5OH
输出:94.108g/mol

a= {'C':12.01,'H':1.008,'O':16.00,'N':14.01}
b = input()
c=[]
i = 0
zsum = 0
while len(b) != i:
    if b[i].isalpha():
        c.append(b[i])
        i+=1
        sum = 0
    if i==len(b):
        break
    if b[i].isdigit():          
        while  i<len(b) and not b[i].isalpha() 
            sum=sum*10+int(b[i])       #数字
            i+=1 
        zsum+=a[c[-1]]*sum 			#zsum总和 

        c.pop()

while c:
    zsum+=a[c[0]]
    c.pop(0)
print('{:.3f}g/mol'.format(zsum))

整体思路:

总体用while用指针i依次指向每一位。字母则入栈,数字则while循环找出整体数字,同时算出当前分子量,字母出栈。最后判断站是否为空。不为空依次加上每一位字母的分子量。每次要操作之前判断指针是否越界。

详细:
用栈 有字母就入栈,遇到数字则用while用一个变量记录数字值当前数字为前一数字*10+当前数字。 直到遇到字母或者最后一位则跳出循环 同时计算出当前字母分子量总分子量加此分子量,同时字母出栈。最后可能是C2H5OH的情况所以最后判断栈是否为空。 不为空则依次加每一个的分子量。

注意点有两个:
①:每次要操作之前(while / if 中)判断指针是否越界。
②: 每次算整体数字的时候sum初始化为0,第一位的前一位为0.此时赋值在判断为字母时赋值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值