这是我第一次在 stackoverflow 上发帖,所以我希望我在网站礼仪方面做的一切都是正确的。我正在上初级编程课程(Python),我目前的任务是在给定用户输入的情况下计算碳、氢和氧化合物的分子量。它可以是任何东西,从 C2 到 C8H19O2,等等。
我有我的代码,但我不断收到一个我不熟悉的错误。本质上,我想做的是让代码逐个字符地读取输入的复合字符,确定它是否是分子。然后,它读取前一个字符右侧的字符,以确定它是否是另一个复合词的数字。如果它是不同的化合物,则将先前的单一化合物添加到它的总分子的运行计数中。如果是数字,则读取右边的下一个字符,再次判断是数字还是字符。如果是数字,它将前一个字符数乘以 10,然后加上下一个,依此类推,直到到达下一个字符(C123H2 将是 10*1 + 2 后跟 10*12 + 3,然后它将在运行计数中增加 123 个碳)。一旦我们的流动计数完成,然后该数字乘以每个的分子量。我不断收到一个索引错误,说我的列表索引超出范围。任何帮助是极大的赞赏!
定义主():
C1 = 0
H1 = 0
O1 = 0
num = 0
chemicalFormula = (input("Enter the chemical formula, or enter key to quit: "))
while True:
cformula = list(chemicalFormula)
for index, x in enumerate(cformula):
if x == 'C':
if cformula[index + 1] == 'H' or cformula[index + 1] == 'O':
C1 += 1
else:
for index, y in enumerate(range(index + 1, 1000000000)):
if cformula[index + 1] != 'H' or cformula[index + 1] != 'O':
num = int(y)
num = num*10 + int(cformula[index + 1])
else:
C1 += num
break
elif x == 'H':
if cformula[index + 1] == 'C' or cformula[index + 1] == 'O':
H1 += 1
else:
for y in range(index + 1, 1000000000):
if cformula[index + 1] != 'C' or cformula[index + 1] != 'O':
num = int(y)
num = num*10 + cformula[index + 1]
else:
H1 += num
break
elif x == 'O':
if cformula[index + 1] == 'C' or cformula[index + 1] == 'H':
O1 += 1
else:
for y in range(index + 1, 1000000000):
if cformula[index + 1] != 'C' or cformula[index + 1] != 'H':
num = int(y)
num = num*10 + cformula[index + 1]
else:
O1 += num
break
else:
break
weightC = 15.994*C1
weightH = 1.0079*H1
weightO = 12.011*O1
sumWeight = weightC + weightH + weightO
print("The molecular weight is ", sumWeight)