Affichage des nombres dans un intervalle
On veut créer une fonction affiche_intervalle qui affiche les entiers de mini à maxi tous deux inclus.
minietmaxisont des entiers- si
maxi < mini, il n'y a rien à afficher
Voici trois solutions récursives d'élèves, sont-elles justes ou fausses, améliorables ?
Version 1
🐍 Script Python
def affiche_intervalle(mini, maxi):
if mini == maxi + 1:
return maxi
else:
print(mini)
return affiche_intervalle(mini + 1, maxi)
Réponse
- La fonction devrait renvoyer
Noneimplicitement, et non une valeur ; il ne faut pas dereturndans cette fonction, uniquement desprint. - La condition doit être revue ; les appels récursifs ne s'arrêtent pas si
mini > maxi + 1.
Version 2
🐍 Script Python
def affiche_intervalle(mini, maxi):
if mini == maxi:
print(mini)
elif mini > maxi:
return None
else:
affiche_intervalle(mini, maxi - 1)
print(maxi)
Réponse
- C'est correct.
- Mais on peut simplifier,
- le premier cas est inutile,
- le second peut se simplifier encore,
- le troisième peut s'écrire de deux façons.
Code réduit
🐍 Script Python
def affiche_intervalle(mini, maxi):
if mini <= maxi:
affiche_intervalle(mini, maxi - 1)
print(maxi)
Version 3
🐍 Script Python
def affiche_intervalle(mini, maxi):
"Affiche, un par ligne, les entiers de mini à maxi inclus"
if mini <= maxi:
print(mini)
affiche_intervalle(mini + 1, maxi)
Réponse
C'est parfait.
Il y a même une docstring, c'est une bonne pratique à adopter pour toute fonction.