スタックオーバーフローに投稿するのはこれが初めてなので、サイトのエチケットに関してすべてを正しく行っていることを願っています。私は初心者のプログラミング クラス (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)