Un problème lié à la récursivité ?
Bonjour,
j'ai voulu utiliser la récursivité pour un code très simple, il s'agit d'une fonction pour la saisie d'une lettre (avec contrôle qu'il y a bien une seule lettre et que c'est une lettre sans accent)
Problème de mon code : le contrôle fonctionne mais le retour de la lettre saisie ne fonctionne que si je mets directement une valeur valide, si je saisie d'abord une entrée non valide ('AA' ou 'è' par exemple), la fonction ne renvoie rien quand je saisis un caractère valide.
Pour bien expliquer, j'ai écrit deux fonctions avec ou sans récursivité que je teste ci dessous.
Si quelqu'un a une explication sur ce que je fais mal, je suis preneur,
Merci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| essai de la fonction SANS récursivité
saisissez une lettre : AA
erreur, vous ne devez saisir qu'une seule lettre
saisissez une lettre : è
erreur : vous devez saisir une lettre (sans accent ou cédille)
saisissez une lettre : d
D
1er essai de la fonction AVEC récursivité
saisissez une lettre : AA
erreur, vous ne devez saisir qu'une seule lettre
saisissez une lettre : è
erreur : vous devez saisir une lettre (sans accent ou cédille)
saisissez une lettre : d
None
2nd essai de la fonction AVEC récursivité
saisissez une lettre : d
D |
lignes 1 à 7 Fonctionnement normal de la fonction sans récursivité avec le retour de la lettre 'D' ligne 7
lignes 9 à 15 même test avec la fonction récursive mais erreur elle renvoie 'NONE' ligne 15
ligne 17 à 19 pourtant elle revoie bien une lettre si je saisie tout de suite une lettre valide
mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| def saisir_une_lettre():
'''renvoie une lettre entre A et Z'''
entreeInvalide = True
while entreeInvalide :
entree = input("saisissez une lettre : ")
# contrôle de la longueur de la chaîne saisie
if len(entree) != 1:
print('erreur, vous ne devez saisir qu\'une seule lettre')
else:
# passage en majuscule
entree = entree.upper()
# contrôle que le caractère est bien entre A et Z (ord 65-90)
if not (ord(entree) > 64 and ord(entree) < 91):
print('erreur : vous devez saisir une lettre (sans accent ou cédille)')
else:
entreeInvalide = False
return entree
def saisir_une_lettre_recursive():
'''renvoie une lettre entre A et Z
Inachevé, le code fonctionne si on saisit une lettre valide du premier coup
mais mais aucun retour pour une entrée valide après une entrée invalide avant ???'''
entree = input("saisissez une lettre : ")
#contrôle de la longueur de la chaîne saisie
if len(entree) !=1:
print('erreur, vous ne devez saisir qu\'une seule lettre')
saisir_une_lettre_recursive()
else:
# passage en majuscule
entree = entree.upper()
# contrôle que le caractère est bien entre A et Z (ord 65-90)
if not(ord(entree)>64 and ord(entree)< 91) :
print('erreur : vous devez saisir une lettre (sans accent ou cédille)')
saisir_une_lettre_recursive()
else :
return entree
# démo fonction
print('essai de la fonction SANS récursivité')
lettre = saisir_une_lettre()
print(lettre, '\n')
print('1er essai de la fonction AVEC récursivité')
lettre = saisir_une_lettre_recursive()
print(lettre, '\n')
print('2nd essai de la fonction AVEC récursivité')
lettre = saisir_une_lettre_recursive()
print(lettre, '\n') |
Ubuntu 22 pycharm python 3.10