题目:
现在,给你一种物质的分子式,请你求出分子量。规定分子式只包含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.此时赋值在判断为字母时赋值。