Je pratique en utilisant des fonctions récursives en sommant tous les éléments d'une liste.
La fonction que j'ai faite était: p> Cette fonction jette cette erreur cependant: < / p> TypeError: type (s) d'opérande non pris en charge pour +: 'int' et 'non constitué p>
BlockQuote> J'ai trouvé la solution, rendant le cas de base Mais maintenant je suis curieux ce que le plain
renvoyer 0 code> au lieu de renvoyer code>. P> retourner code> était, ou n'était pas, faire pour lancer une erreur? Et pourquoi en Python, une langue assez flexible et qui pardonne, une telle chose est un problème? P> p>
3 Réponses :
Comme indiqué dans les commentaires, n'en retournez pas dans la première section. Retour 0 à la place.
$ python test.py 6
Voulez-vous juste vous donner une version plus pythonique, j'espère que cela ne vous dérange pas.
def list_sum_recursive(input_list):
#base case, list is empty
if not input_list:
return 0
#return the sum of the head plus the sum of the rest of the list
return input_list.pop(0) + list_sum_recursive(input_list)
print(list_sum_recursive([1,2,3]))
Oui, j'aurais utilisé Input_List [0] + list_sum_recursive ([INPUT_LIST [1:]). Je me sens un peu inquiet de modifier la liste et de l'utiliser dans la même déclaration.
@DeePstop Ouais, la tranche ressemble à plus sûre et peut-être plus confortable pour plus de personnes.
J'aime à la fois la méthode Popping et Tranchement. Ce sont les types de choses que je dois commencer à rechercher dans mon code. C'est très propre
def list_sum_recursive(input_list):
#base case, list is empty
if input_list == []:
print("empty")
return
#recursive case
else:
#grab the first element
head = input_list[0]
del input_list[0]
#return the sum of the head plus the sum of the rest of the list
x=list_sum_recursive(input_list)
if(x==None):
return head + 0
else:
return head+x
return 0 instead of none. or you can do this trick.
Être flexible et pardonné ne signifie pas que la langue devrait deviner ce que vous voulez.
Retour Code> sur son propre renvoi implicitementAucun code>. C'est une règle de la langueIl suffit de retourner des retours
Aucun code> Alors, lorsque vous faites cetteretour head + list_sum_recursive (INPUT_LIST) code> Vous ajouteztête code> àAucun code> Aucun code> lorsque le boîtier de base est atteint. C'est impardonnable parce que Python est une langue fortement dactylographiée, qui aide à éviter certains bugs qui se produiront si vous supposezAucun code> devrait se convertir automatiquement à zéro ..Tous les appels de fonction dans Python renvoient une valeur. Si un
NARE code> est exécuté ou si l'exécution tombe de la fin de la fonction sans exécuter unretour code>, ils renvoient implicitementaucun code>. Il n'y a pas de concept de type "vide" qui donne une erreur si une tentative est faite de l'utiliser.Merci pour la clarification. Je n'étais pas au courant d'une déclaration de retour nue avait un type de retour d'aucun.