Pourquoi ma fonction récursive semble-t-elle renvoyer Aucun ?
Considérez une fonction récursive qui valide la saisie de l'utilisateur :
def get_input(): my_var = input('Enter "a" or "b": ') if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') get_input() # Recursively call the function else: return my_var print('got input:', get_input())
Si l'utilisateur saisit « a » ou « b », tout fonctionne comme prévu. Cependant, si l'utilisateur saisit initialement une entrée invalide puis la corrige, la fonction semble renvoyer Aucun au lieu de l'entrée de l'utilisateur.
Ce comportement erratique provient d'un oubli dans la branche récursive. Bien que la fonction s'appelle à nouveau correctement, elle ne parvient pas à renvoyer le résultat de l'appel récursif :
if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') get_input() # This line should be replaced
Pour résoudre ce problème, nous devons renvoyer la valeur obtenue à partir de l'appel récursif :
if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') return get_input() # We return the result of the recursive call
Ce changement garantit que la fonction se répercute correctement sur la pile récursive, renvoyant l'entrée utilisateur corrigée.
# Modified function def get_input(): my_var = input('Enter "a" or "b": ') if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') return get_input() # We return the result of the recursive call else: return my_var print('got input:', get_input())
Avec cette modification, la fonction renverra correctement l'entrée de l'utilisateur, même après avoir traité des entrées non valides.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!