-2
votes

Pour la boucle ne portant pas jusqu'à la fin

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)
for an input like CH3CH2CH3 it should output hydrogen count = 8
but instead it outputs hydrogen count = 3 as it stops at the first h 

2 commentaires

échancrure. retourner à l'intérieur pour boucle


Il semble que vous ayez inaccepté une réponse acceptée hier. Des raisons?


3 Réponses :


3
votes

Unindent la déclaration de retour. Il est actuellement à l'intérieur du pour code> boucle et doit être exécuté après. Sinon, il ne comptera que le premier.

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 commentaires

Bien sûr. N'oubliez pas de le marquer comme la réponse acceptée si c'est celui que vous avez choisi d'aller avec. Je recommande vivement de vérifier la réponse @ajeet Mishra donnée ci-dessous car ils fournissent une solution beaucoup plus complète.



0
votes

Vous pouvez refacturer votre code comme celui-ci:


xxx

sortie

8


0 commentaires

1
votes

Et si le H dans la molécule a plus de 9 atomes, disons composé de sucre C12H22O11 ou glucose C6H12O6?

Puis-je vous suggérer de réorganiser le code de cette façon: P>

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"))


5 commentaires

Oh oui, je ne pensais pas à cela, sa partie de la portée. malade juste ajouter un bloc d'élifs supplémentaire. C'est pour mon projet d'école final qui ressemble à une sorte de nommer composé. J'aimerais si tu m'as donné des conseils.


Comment devrais-je faire le problème du ch3cooh?


Bien sûr, c'est une très petite modification de mon code. J'ai mis à jour ma réponse pour vous. N'oubliez pas de donner une note positive si cela aide.


Pourriez-vous s'il vous plaît expliquer comment cela fonctionne pour une utilisation dans d'autres parties du programme, merci.


Oui, voici l'explication - la fonction regex.findall () dans mon code utilise une expression régulière pour identifier tous les numéros après chaque atome H dans une molécule et stocker dans "res". De plus, si le nombre n'est pas trouvé, la même chose est remplacée par 1 et stockée dans la liste appelée "res". Tous les éléments de RES sont convertis en entiers et sont ajoutés pour renvoyer la réponse souhaitée.