Affichage d'intervalle⚓︎
On veut créer une fonction affiche_intervalle
qui affiche les entiers de mini
à maxi
tous deux inclus.
mini
etmaxi
sont 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
None
implicitement, et non une valeur ; il ne faut pas dereturn
dans cette fonction. - 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.
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.