def HydrogenCount(Compound):
HydrogenNo = 0
for i in range(0, len(Compound)):
Compound[i] == "H":
print(Compound[i+1])
Temp = Compound[i+1]
Temp = int(Temp)
HydrogenNo = HydrogenNo + Temp
return HydrogenNo
HydrogenNo = HydrogenCount(Compound)
print ("HydrogenCount = ", HydrogenNo)
对于像CH3CH2CH3这样的输入,它应该输出氢计数= 8但是输出氢计数= 3,因为它在第一个h停止
Unindent返回声明。它目前在for
循环中,需要在之后执行。否则它只计算第一个。
def HydrogenCount(Compound):
HydrogenNo = 0
for i in range(0, len(Compound)):
Compound[i] == "H":
print(Compound[i+1])
Temp = Compound[i+1]
Temp = int(Temp)
HydrogenNo += Temp
return HydrogenNo
如果分子中的H具有多于9个原子,例如糖化合物C12H22O11或葡萄糖C6H12O6,该怎么办?
我建议你这样修改代码:
import re
regex = re.compile('H([0-9]*)')
def HydrogenCount(Compound):
try:
return sum([int(i) for i in regex.findall(Compound)])
except:
return(0)
你可以这样运行:
print(HydrogenCount("CH3CH2CH3"))
print(HydrogenCount("C6H12O6"))
我仍然看到问题中的另一个缺陷,因此所有答案都是如此,这就是像CH3COOH这样的分子,其中H后跟没有数字意味着1个原子。所以,这是修改后的代码来处理它:
import re
regex = re.compile('H([0-9]*)')
def HydrogenCount_v2(Compound):
try:
res = [i if i != '' else '1' for i in regex.findall(Compound)]
return sum([int(i) for i in res])
except:
return(0)
print(HydrogenCount_v2("CH3CH2CH3"))
print(HydrogenCount_v2("C6H12O6"))
print(HydrogenCount_v2("CH3COOH"))
您可以像这样重构代码:
def calculate_hydrogen_count(compound):
hydrogen_count = 0
for i in range(0, len(compound) - 1):
if compound[i] == "H":
hydrogen_count += int(compound[i + 1])
return hydrogen_count
compound = "CH3CH2CH3"
hydrogen_count = calculate_hydrogen_count(compound)
print ("HydrogenCount = ", hydrogen_count)
输出
8