对于循环不进行直到结束[关闭]

问题描述 投票:0回答:3
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停止

python for-loop
3个回答
3
投票

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

1
投票

如果分子中的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"))

0
投票

您可以像这样重构代码:


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

© www.soinside.com 2019 - 2024. All rights reserved.