Vous recevez une chaîne de caractères de lettres minuscules. Vous devez compter le nombre de fois où le mot doge apparaît dans la chaîne. De plus, le g dans doge peut être remplacé par n'importe quelle lettre de az donc dope est également valide.
Cette question est apparue sur un site Web Je regardais. Étant donné que le site n'a pas d'option pour discuter du problème, je demande de l'aide ici à la place:
0 0
Pour l'entrée:
2 dog dogedopedose
Votre résultat est:
def doge_count(str):
count=0
for i in range (0,len(str)):
if (i=="d" and i+1=="o" and i+3=="e"):
count= count+1
return count
4 Réponses :
Votre logique est en fait assez proche. Le seul problème est que Le correctif consiste à utiliser Vous voudrez également boucler d'une manière qui ne s'exécute pas après la fin de la chaîne: Une solution plus robuste serait d'utiliser expressions régulières . Le modèle suivant correspond aux chaînes souhaitées: Vous pouvez compter les occurrences en utilisant i est un entier, donc les comparaisons i == "d" et i + 1 == "o" et i + 3 == "e" code > sera toujours faux. Vous vous attendez à obtenir une correspondance lorsque i == 0 , mais 0! = "D" , jamais. i pour indexer dans str , comme il semble que vous vouliez: count = len(re.findall('do[a-z]e]', str))
do[a-z]e
for i in range(len(str) - 3):
re.findall : if str[i:i+2] == "do" and str[i+3] == "e":
La bonne façon de remercier est de sélectionner la réponse en cliquant sur la coche à côté. Je suis content que vous ayez trouvé ma réponse utile.
Cela ne fonctionne pas, il dit que l'index de la chaîne est hors de portée e
Mise à jour. Vous devez modifier un peu la plage.
La raison pour laquelle votre code ne fonctionne pas est que vous vérifiez si un entier est égal à la chaîne dans cette ligne de code: i == "d" .
Cette ligne de code: for i in range (0, len (str)) renvoie un nombre entier de 0 à length_of_string - 1 .
Ce que vous il faut vérifier si la chaîne de i ème position est égale à l'agitation souhaitée. comme: str [i] == "d"
Ce serait la version correcte de votre code dans votre logique:
def doge_count(str):
count = 0
for i in range(0, len(str)-3):
if str[i] == "d" and str[i+1] == "o" and str[i+3] == "e":
count = count+1
return count
print(doge_count('dog'))
print(doge_count('dogedopedose'))
Vous pouvez utiliser une compréhension de liste:
>>> [s[i:i+4] for i in range(len(s)-3) if s[i:i+2]=='do' and s[i+3]=='e'] ['doge', 'dope', 'dose']
test_patterns='do[a-z]e'
phrase = 'this is doze but Doze again dore then dofe'
list_matches = re.findall(test_patterns,phrase.lower())
print('The number of d(any alphabet)ze : {frequency}'.format(frequency=len(list_matches)))
FindAll matches of the pattern int he list then get the count of the list and you will get the number of doge or dofe or any such
vous ne devriez jamais appeler vos objets après des éléments intégrés (
strdans votre extrait de code)J'ai modifié votre titre pour mieux décrire votre problème technique. J'espère que vous approuvez.