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
3 Réponses :
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
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.
Vous pouvez refacturer votre code comme celui-ci:
sortie fort> p> 8 p> p>
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"))
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.
échancrure. retourner à l'intérieur pour boucle
Il semble que vous ayez inaccepté une réponse acceptée hier. Des raisons?