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
lignes 1 à 7 Fonctionnement normal de la fonction sans récursivité avec le retour de la lettre 'D' ligne 7
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 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
Ubuntu 22 pycharm python 3.10
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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')
Partager