word = ["cs", "is", "fun", "homework", "is", "sometimes", "fun",
"exams", "are", "not", "fun"].
lst = ["fun", "is","not"]
def num(word,lst,sofar):
if len(lst) == 0:
return sofar
elif lst[0] in word == False:
return num(word, lst[1:],sofar)
else:
sofar = sofar +1
return num(word,lst,sofar)
function returns how many times the words in list lst occur in list word and returns it as sofarThe function should return 6 but it returns 0
4 Réponses :
Vous avez Correction: p> mot code> et lst code> tourné dans votre logique. Votre code rétrécit la liste qui contient les éléments que vous recherchez - pas la liste où vous les regardez dans. def num(word,lst,sofar):
if not word:
return sofar
if word[0] in lst:
return num(word[1:], lst, sofar+1)
else:
return num(word[1:], lst, sofar)
Premier: vous avez déclaré mot code> et lst code> faux, il devrait être l'inverse.
Deuxièmement: vous pouvez le faire sans le si-d'autre
Troisièmement: Débarrassez-vous du SOFAR LST = [
"cs", "is", "fun",
"homework", "is", "sometimes", "fun",
"exams", "are", "not", "fun"
]
WORD = ["fun", "is","not"]
def num(word, lst):
if len(lst) == 0:
return 0
inc = 1 if lst[0] in word else 0
return num(word, lst[1:]) + inc
print(num(WORD, LST))
Le problème est que vous n'allez pas sur le mot suivant dans la liste lorsque le mot a été trouvé.
Vous étiez également itération sur la mauvaise liste (échange Essayez ceci: p> une version légèrement nettoyeuse: p> lst code> et Word < / code> autour). p>
En ce qui concerne la récursion, mon inclinaison est de le garder simple:
Je soupçonne fortement que votre problème est un typo:
so_far code> vsSofar code>. Vous attribuez àso_far code>, mais n'utilisez jamais la valeur.Désolé, c'était une faute de frappe tout en modifiant les noms de la variable. Le problème persiste toujours.
La réponse à cette question devrait être 6 mais elle retourne 0
Votre code tel que modifié ne renvoie toujours rien. Le programme initialise deux listes, définit une fonction et ses sorties sans appeler la fonction.