Liste définie en compréhension
On souhaite écrire une fonction nommée fini_par_1 qui prend deux arguments entiers naturels a et b et qui retourne la liste des entiers compris, au sens large, entre a et b dont le chiffre des unités est égal à 1.
Par exemple, on souhaite que fini_par_1(0, 21) retourne la liste [1, 11, 21]
Il faut que cette fonction ne contienne qu'une unique commande (qui peut toutefois faire appel à plusieurs instructions) suivant le modèle ci-dessous :
def fini_par_1(a, b) :
return ...
Indications :
On utilisera une liste définie en compréhension.
On rappelle que l'instruction x % y renvoie le reste de la division euclidienne de x par y.
Test :
Pour vérifier votre réponse, testez votre fonction avec les commandes :
>>> fini_par_1(0,1)
>>> fini_par_1(1,11)
>>> fini_par_1(10,50)
>>> fini_par_1(10,51)
>>> fini_par_1(100,50)
Corrigé
Voici une fonction possible :
def fini_par_1(a, b) :
return [x for x in range(a,b+1) if x%10==1]
Explications :
range(a,b+1) retourne les entiers naturels compris entre a et b. On filtre ensuite cette liste à l'aide d'une instruction if.
x %10 retourne le reste de la division euclidienne de x par 10, c'est à dire le dernier chiffre de x. On teste alors si ce chiffre est égal à 1.
Test :
Voici les listes renvoyées par cette fonction pour les exemples donnés dans l'énoncé :
>>> fini_par_1(0,1)
[1]
>>> fini_par_1(1,11)
[1, 11]
>>> fini_par_1(10,50)
[11, 21, 31, 41]
>>> fini_par_1(10,51)
[11, 21, 31, 41, 51]
>>> fini_par_1(100,50)
[] # car 100 > 50